PROGRAMERS Programers : 구명보트 (greedy) 같이 탈 수 있는 사람과 탔을 때, 가장 여유공간이 적게 남는 경우가 효율적! 해당 경우를 찾기 위해 이중 for문을 썼더니 효율성 검사에서 실패함 같은 결과를 내지만 정렬 후 head / tail로 접근을 하면 훨~씬 빠르다! (..이런게 알고리즘의 힘인가) 주의해야 할 점은 반드시 tail에 해당하는 사람은 태워야 한다는 것이다! -> 무게가 적은 사람들 끼리 있을 때 함께 탈 수 있는 ... level2PROGRAMERSPROGRAMERS Programers : 수식 최대화 -next_permutation() key point! : 연산자의 종류 개수에 따라 가능한 조합을 구하는 것이 관건 <algorithm> 에 next_permutation()을 이용하면 현재 조합에서 다음 순열을 구할 수 있음! tmp배열에 [0, 1, 2, 3, 4] 가 있을 때 [0,1,2,3,4] ~ [4,3,2,1,0] 까지 모든 조합으로 바꾸어 준다 반환형은 bool형이기 때문에 조건으로 사용! prev_permut... level2PROGRAMERSPROGRAMERS Programers : 조이스틱 (greedy) key point! 1) 조이스틱을 위/아래로 움직이는 것의 선택은 min을 이용해 해결 2) 조이스틱을 왼쪽/오른쪽 으로 움직이는 것의 선택은 먼저 'A'가 아닌 요소가 발견할 때 까지 찾기 --> 바꾼 name의 값을 'A'로 치환해주는 작업이 필요!... level2PROGRAMERSPROGRAMERS Programers : 주식 가격 (stack) 직관적인 풀이법 시간복잡도가 아슬아슬해 보인다 O(N^2) 보다 효율적이게 만드려다가 시간이 많이 소모되었다. (이럴 때에는 한번 해보는게 더 좋아보인다ㅠㅠ) 스택을 사용한 방법이 더 빠른 해결 방법! 값이 아닌 인덱스를 활용한 것이 key point!... level2PROGRAMERSPROGRAMERS rogramers : 단어 변환 - C++ 백트래킹PROGRAMERSlevel3PROGRAMERS rogramers : 여행 경로 - C++ 깨달은 것 : vector<vector<string>>> ansList 자체를 오름차순으로 꺼내려면 sort(ansList.begin(), ansList.end()); 로하면 된다 (기본 sort에서 vector<string>에 대해 알아서 정렬 해줌)... 백트래킹PROGRAMERSlevel3PROGRAMERS Programers : [3차] n진수 게임 어려워 보였지만 생각보다 쉬웠음! 10진법이 넘어갈 경우 알파벳으로 치환해야하는데 number 배열을 이용하는 좋은 방법을 배움!... level2PROGRAMERSPROGRAMERS Programers : 문자열 압축 (2020 KAKAO BLIND RECRUITMENT) 문자열이 n일때에 [ 1 ~ n/2개 ]의 단위로 자를 때 까지 개수를 구한 뒤 최소를 구해야 함 3중 for문으로 구조가 구성됨 1) slice for문 : 1 ~ n/2개 단위로 자르는 큰 틀 2) 비교 할 기준이 되는 문자 for문 3) 비교 할 대상이 되는 문자 for문 예외로 문자열이 1일 때 바로 return 처리를 해주어야 한다... level2PROGRAMERSPROGRAMERS Programers : 짝지어 제거하기 단순히 string에서 삭제하는 방식으로 하면 --> O(N^2) 효율성과 관련한 문제에 부딛히면 '자료구조'를 바꾸는 것을 생각해보기! 이전 값과 현재 값의 상관관계가 있는 경우 stack을 고려해보자!... level2PROGRAMERSPROGRAMERS Programers : 제일 작은 수 제거하기 <algorithm>의 find는 찾으면 해당 요소의 iterator를 반환 / 찾지 못하면 v.end()를 가리키게 된다! <algorithm>에 해당 stl에 min/max를 찾는 함수가 있다! 1) min_element() : 최소값에 해당하는 요소의 iterator를 반환 2) max_element() : 최대값에 해당하는 요소의 iterator를 반환... level1PROGRAMERSPROGRAMERS Programers : N개의 최소공배수 (GCD / LCM) 모든 수를 대상으로 최소 공배수를 구하려면 각 약수들의 최대 차수들의 곱이 필요하다고 생각했음 그래서 모든 수의 약수를 구했고, 최대 값들만 map에 저장하여 계산했음 밑에 풀이가 더 간단하고 똑똑한 풀이! key point! : 앞에 2개씩 차례차례 최소 공배수를 구하면 결국 모든 수의 최소공배수를 구할 수 있음 최대공약수를 구하는 GCD와 최소공배수를 구하는 LCM을 만드는 함수는 외워두... level2PROGRAMERSPROGRAMERS Programers : 최댓값과 최솟값 (sstream) stringstream을 사용할 때 끝을 검사하기 위해 ss.eof()를 이용하면 된다 int 자료형으로 받을 때 음수도 잘 받아온다!... level2PROGRAMERSPROGRAMERS rogramers : 땅따먹기 - C++ 문제 : N이 너무 커서 시간초과 key point! : DP의 핵심인 메모제이션(memoization)을 사용해야 한다... level2DPPROGRAMERSDP Programers : 다리를 지나는 트럭(queue) key point! 1) queue가 가득찼을 때 pop() 과 push()가 하나의 cycle에 존재해야 한다. 2) pop() 다음에 push()를 해주는 순서가 중요! 3) queue의 size()로 pop여부를 확인하기 때문에 빈 값(0)을 넣어주어야 한다! 4) 마지막 모든 트럭이 queue에 올라갔을 때 bridge_length만큼 더하고 break!... level2PROGRAMERSPROGRAMERS Programers : 서울에서 김서방 찾기 (find) string.find()은 문자열 내에 특정 문자열을 찾는 것이기 때문에 쓸 수 없다. <algorithm>에 있는 find()를 사용해서 문제를 해결 할 수 있다 원하는 문자열을 입력한 뒤 seoul.begin() 을 빼주면 인덱스를 구할 수 있다고 한다 (참조함)... level1PROGRAMERSPROGRAMERS
Programers : 구명보트 (greedy) 같이 탈 수 있는 사람과 탔을 때, 가장 여유공간이 적게 남는 경우가 효율적! 해당 경우를 찾기 위해 이중 for문을 썼더니 효율성 검사에서 실패함 같은 결과를 내지만 정렬 후 head / tail로 접근을 하면 훨~씬 빠르다! (..이런게 알고리즘의 힘인가) 주의해야 할 점은 반드시 tail에 해당하는 사람은 태워야 한다는 것이다! -> 무게가 적은 사람들 끼리 있을 때 함께 탈 수 있는 ... level2PROGRAMERSPROGRAMERS Programers : 수식 최대화 -next_permutation() key point! : 연산자의 종류 개수에 따라 가능한 조합을 구하는 것이 관건 <algorithm> 에 next_permutation()을 이용하면 현재 조합에서 다음 순열을 구할 수 있음! tmp배열에 [0, 1, 2, 3, 4] 가 있을 때 [0,1,2,3,4] ~ [4,3,2,1,0] 까지 모든 조합으로 바꾸어 준다 반환형은 bool형이기 때문에 조건으로 사용! prev_permut... level2PROGRAMERSPROGRAMERS Programers : 조이스틱 (greedy) key point! 1) 조이스틱을 위/아래로 움직이는 것의 선택은 min을 이용해 해결 2) 조이스틱을 왼쪽/오른쪽 으로 움직이는 것의 선택은 먼저 'A'가 아닌 요소가 발견할 때 까지 찾기 --> 바꾼 name의 값을 'A'로 치환해주는 작업이 필요!... level2PROGRAMERSPROGRAMERS Programers : 주식 가격 (stack) 직관적인 풀이법 시간복잡도가 아슬아슬해 보인다 O(N^2) 보다 효율적이게 만드려다가 시간이 많이 소모되었다. (이럴 때에는 한번 해보는게 더 좋아보인다ㅠㅠ) 스택을 사용한 방법이 더 빠른 해결 방법! 값이 아닌 인덱스를 활용한 것이 key point!... level2PROGRAMERSPROGRAMERS rogramers : 단어 변환 - C++ 백트래킹PROGRAMERSlevel3PROGRAMERS rogramers : 여행 경로 - C++ 깨달은 것 : vector<vector<string>>> ansList 자체를 오름차순으로 꺼내려면 sort(ansList.begin(), ansList.end()); 로하면 된다 (기본 sort에서 vector<string>에 대해 알아서 정렬 해줌)... 백트래킹PROGRAMERSlevel3PROGRAMERS Programers : [3차] n진수 게임 어려워 보였지만 생각보다 쉬웠음! 10진법이 넘어갈 경우 알파벳으로 치환해야하는데 number 배열을 이용하는 좋은 방법을 배움!... level2PROGRAMERSPROGRAMERS Programers : 문자열 압축 (2020 KAKAO BLIND RECRUITMENT) 문자열이 n일때에 [ 1 ~ n/2개 ]의 단위로 자를 때 까지 개수를 구한 뒤 최소를 구해야 함 3중 for문으로 구조가 구성됨 1) slice for문 : 1 ~ n/2개 단위로 자르는 큰 틀 2) 비교 할 기준이 되는 문자 for문 3) 비교 할 대상이 되는 문자 for문 예외로 문자열이 1일 때 바로 return 처리를 해주어야 한다... level2PROGRAMERSPROGRAMERS Programers : 짝지어 제거하기 단순히 string에서 삭제하는 방식으로 하면 --> O(N^2) 효율성과 관련한 문제에 부딛히면 '자료구조'를 바꾸는 것을 생각해보기! 이전 값과 현재 값의 상관관계가 있는 경우 stack을 고려해보자!... level2PROGRAMERSPROGRAMERS Programers : 제일 작은 수 제거하기 <algorithm>의 find는 찾으면 해당 요소의 iterator를 반환 / 찾지 못하면 v.end()를 가리키게 된다! <algorithm>에 해당 stl에 min/max를 찾는 함수가 있다! 1) min_element() : 최소값에 해당하는 요소의 iterator를 반환 2) max_element() : 최대값에 해당하는 요소의 iterator를 반환... level1PROGRAMERSPROGRAMERS Programers : N개의 최소공배수 (GCD / LCM) 모든 수를 대상으로 최소 공배수를 구하려면 각 약수들의 최대 차수들의 곱이 필요하다고 생각했음 그래서 모든 수의 약수를 구했고, 최대 값들만 map에 저장하여 계산했음 밑에 풀이가 더 간단하고 똑똑한 풀이! key point! : 앞에 2개씩 차례차례 최소 공배수를 구하면 결국 모든 수의 최소공배수를 구할 수 있음 최대공약수를 구하는 GCD와 최소공배수를 구하는 LCM을 만드는 함수는 외워두... level2PROGRAMERSPROGRAMERS Programers : 최댓값과 최솟값 (sstream) stringstream을 사용할 때 끝을 검사하기 위해 ss.eof()를 이용하면 된다 int 자료형으로 받을 때 음수도 잘 받아온다!... level2PROGRAMERSPROGRAMERS rogramers : 땅따먹기 - C++ 문제 : N이 너무 커서 시간초과 key point! : DP의 핵심인 메모제이션(memoization)을 사용해야 한다... level2DPPROGRAMERSDP Programers : 다리를 지나는 트럭(queue) key point! 1) queue가 가득찼을 때 pop() 과 push()가 하나의 cycle에 존재해야 한다. 2) pop() 다음에 push()를 해주는 순서가 중요! 3) queue의 size()로 pop여부를 확인하기 때문에 빈 값(0)을 넣어주어야 한다! 4) 마지막 모든 트럭이 queue에 올라갔을 때 bridge_length만큼 더하고 break!... level2PROGRAMERSPROGRAMERS Programers : 서울에서 김서방 찾기 (find) string.find()은 문자열 내에 특정 문자열을 찾는 것이기 때문에 쓸 수 없다. <algorithm>에 있는 find()를 사용해서 문제를 해결 할 수 있다 원하는 문자열을 입력한 뒤 seoul.begin() 을 빼주면 인덱스를 구할 수 있다고 한다 (참조함)... level1PROGRAMERSPROGRAMERS