학습 정리 79

<소프트 스킬> - 존 손메즈

📖 책 소개 평범한 개발자의 비범한 “인생 전략” 74가지 라는 부제목 처럼, ‘개발자를 위한 자기개발서’라는 설명이 잘 어울리는 책이다. 요즘들어 개발자에게 특히 강조되는 능력이 ‘소프트 스킬’이다. 소프트 스킬은 프로그래밍 실력같은 ‘하드 스킬’과 달리, 의사소통 능력 같이 협력에 필요한 비기술적인 능력을 말한다. 이런 소프트 스킬을 기르기 위한 방법들이 책에 소개되어 있다. 책은 총 7부로 구성되어 있다. 초반부는 “경력”, “학습”, “생산성” 같은 개발자에게 필요한 전략이 소개되어 있고, 후반부에는 “재무관리”, “건강” 같이 개발자에게 특화된 내용이 아닌 일반적인 자기개발서에서 찾아볼 수 있는 전략을 담았다. 책을 처음 읽을 때는 저자가 일하는 미국과 한국의 차이를 고려해가면서 읽었는데, 생..

[Python] 줄 세우기 (백준 7570번)

문제 https://www.acmicpc.net/problem/7570  문제 풀이 과정N=100만이고, N log N ~ 2000만이므로 O(NlogN) 시간 내에 풀어야 하는 문제입니다. 처음 봤을 때 떠오른 방식은 최장 증가 부분수열(LIS) 이었습니다. (처음 풀이 코드 - 실패)import sysinput = sys.stdin.readlinen = int(input())data = list(map(int, input().split()))# target 보다 작은 값 중 가장 큰 값의 index 반환def binary_search(array, target): start, end = 0, len(array) - 1 result = -1 while start = len(dp): ..

[Python] 피보나치 함수 (백준 1003번)

문제 https://www.acmicpc.net/problem/1003  문제 풀이 과정 전형적인 dp 문제입니다. dp[n]에 fibonacci(n)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 저장하도록 해보겠습니다.배열의 첫 원소는 0이 출력되는 횟수, 두 번째 원소는 1이 출력되는 횟수를 저장하는 식으로 구현하겠습니다. 먼저 손으로 dp[0]부터 값을 채워보면서 규칙을 찾아보겠습니다. dp[0]과 dp[1]은 예시에서도 나와있듯이 [1,0]과 [0,1]입니다.dp[2]는 dp[0]과 dp[1]을 호출하므로 두 값을 합한 값인 [1,1]이 되고,마찬가지로 dp[3]도 dp[1]과 dp[2]를 합한 값이 됩니다. dp[i][0] = dp[i - 1][0] + dp[i - 2][0]dp[i][1]..

[Python] 색상환 (백준 2482번)

문제 https://www.acmicpc.net/problem/2482 문제 풀이 과정 일단 규칙성을 찾아보기 위해 n=4부터 7, k=1부터 4까지의 값을 손으로 계산해 보았습니다.  풀면서 찾게 된 점화식은 다음과 같습니다.dp[n][k] = dp[n-2][k-1] + dp[n-1][k]예를 들어, 각 색상을 1번부터 n번까지의 번호라고 가정하고 1번과 n번이 연결되었다고 해보겠습니다.n=7, k=3 인 상황에서 가능한 경우는 다음과 같습니다.1 3 61 4 62 4 72 5 73 5 71 3 52 4 6위의 경우를 잘 살펴보면 n=5, k=2일 때 가능한 값에6과 7이 추가된 경우의 수가 있고1 3 + 61 4 + 62 4 + 72 5 + 73 5 + 7n=6, n=3일때 가능한 ..

[Python] 타일 채우기 (백준 2133번)

문제 https://www.acmicpc.net/problem/11726  문제 풀이 과정  예전에 풀었던 2xn 타일링 문제와 비슷해서 바로 dp 문제라는 것을 떠올릴 수 있었습니다. dp 테이블은 dp[n]이 3*n 크기의 벽을 채울 수 있는 경우의 수로 가정하고 만들었습니다. 규칙을 찾기 위해서 위의 그림처럼 하나씩 경우의 수를 그려가며 풀어보았습니다. 그 결과n=홀수 인 벽은 채울 수 없다.n=2인 경우에는 3가지 경우가 가능n=4인 경우부터는 기존의 조합을 사용하지 않는 2개의 새로운 경우와, 기존의 조합을 활용한 경우의 수가 존재한다.라는 규칙을 찾았습니다. 조금 더 구체적으로 설명하면, n=4 이상일 때 가능한 경우의 수는 다음과 같습니다.기존 경우의 수로 채우지 못하는 2가지 경우먼저 2칸..

<함께 자라기 : 애자일로 가는 길> - 김창준

작년 여름에 처음 읽었던 책이다. 겨울에 프로젝트를 하면서도 종종 읽어보았고, 오늘에서야 독서 기록을 남겨본다. 애자일 방법론을 소개해온 김창준 대표가 쓴 이 책은 “자라기” / “함께” / “애자일” 총 3부로 구성되어 있다. 우리는 (거의) 평생 세수와 양치질을 꾸준하게 반복했건만 왜 세수와 양치의 달인이 안 될까요? 예컨대 10년이 지나도 여전히 양치질을 제대로 못 해서 치과에 갈까요. 가서는 의사에게 "이쪽 치아는 하나도 안 닦으시나 봐요" 같은 소리를 듣고요. 53p “자라기” 에서는 1만 시간의 법칙을 이야기하면서 그냥 수련이 아닌 ‘의도적 수련(Deliberate Practice)’이 필요하다고 말한다. 예컨대, 우리는 평생 양치질을 해왔지만 양치질의 달인이 되지는 못한다. 이러한 수련이 아..

<나는 네이버 프런트엔드 개발자입니다> - 김지한, 하성욱, 장기효, 윤정현, 손찬욱, 김다현, 박재성, 윤영제

처음에는 프런트엔드 개발자로 취업하기 위해 갖출 점을 찾기 위해 읽기 시작했지만, 취업 이야기만큼이나 선배 개발자들의 성장 이야기도 인상적이었던 책이었다. 책은 총 8명의 네이버 프런트엔드 개발자가 말하는 이야기로 만들어졌다. 딱딱한 개발 이야기만 있는 것이 아니라 프런트엔드 초창기 개발 이야기, 다양한 일과 업무를 거쳐 프런트엔드 개발자가 되기까지의 이야기 등 가볍게 읽을 수 있는 내용도 많아 읽는 데 부담은 없었다. 개발자님들의 각 이야기는 다음과 같이 구성되어 있다. 프런트엔드 개발자가 되려면 무엇을 공부해야 하나요? (김지한) 미국의 신입 개발자 한국으로 돌아오다 (하성욱) 프런트엔드 개발 상담, 무엇이든 물어보세요 (장기효) 오류와 실수, 신기술 도입, 성능 지표 이야기 (윤정현) 꿈을 현실로,..

[C++] 프로그래머스 - 크기가 작은 부분 문자열

https://school.programmers.co.kr/learn/courses/30/lessons/147355 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [소스 코드] // 23.06.23 #include #include using namespace std; int solution(string t, string p) { int answer = 0; for(int i=0;i

[C++] 프로그래머스 - 과제 진행하기

https://school.programmers.co.kr/learn/courses/30/lessons/176962 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [소스 코드] //23.06.22 #include #include #include using namespace std; bool compare(vector a, vector b) { return a[1] < b[1]; } vector solution(vector plans) { vector answer; vector waitTesk; sort(plans.begin(), plans.end(), c..

[C++] 프로그래머스 - 연속된 부분 수열의 합

https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [소스 코드] // 23.06.21 #include #include using namespace std; vector solution(vector sequence, int k) { vector answer; answer.push_back(1); answer.push_back(1000002); int i=0; int j=0; int sum=sequence[0]; while (i = k){ if(s..