일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 인터럽트
- 독학
- Transform
- 프로그래머스
- dfs
- 멀티스레드
- 138477
- 풀이
- 코딩테스트
- BFS
- 입출력장치
- DirectX
- 스레드
- DDR SDRAM
- 한빛미디어
- 보조기억장치
- 131701
- 혼자공부하는
- 지역변수
- 운영체제
- 렌더링 파이프라인
- 그래프
- 프로세스
- CPU 스케줄링
- 컴퓨터 구조
- 컴퓨터구조
- static
- 혼자 공부하는
- 장치컨트롤러
- C++
- Today
- Total
목록코딩테스트 (13)
빼미의 개발일기

● 소감 - 문제는 복잡해보이는데 막상 풀면 Lv.1인 문제 ● 나의 풀이 더보기 1) 문제 이해 - 홍박사는 n / 2 개의 포켓몬을 주는데 최대한 많은 종류의 포켓몬을 가져가고 싶어한다. 그럼 고려할 건 종류수가 맞게 가져갈건지, n / 2 개를 가져갈지만 보면 된다. - 종류수가 다양하다면 n / 2개, 종류수가 n / 2개 보다 적다면 종류수대로 가져간다. 끝! 2) 조건 찾기 - 나는 unordered_map을 사용했는데 나중에 보니 unordered_set으로 했어도 충분했겠다는 생각이 들었고, 그렇게 푼 사람도 많았다. 일단은 unordered_map을 사용한 풀이다. - nums의 각 인덱스에 접근하고 해당 번호의 값을 추가해주거나, 증가 시켜준다. 이건 저번 문제에서 풀었던 map.fin..

● 소감 - 재밌는 문제였다 ● 나의 풀이 더보기 1) 문제 이해 - 1행 1열에서 1로 시작해서 파동이 퍼져나가듯 오른쪽, 아래, 대각선으로 1씩 증가하는 모습이 된다. 1 2 3 4 5 2 2 3 4 5 3 3 3 4 5 4 4 4 4 5 5 5 5 5 5 - 때문에 행으로 자르든 열로 가르든 생성되는 수는 동일하며, 배열을 직접 만들면 무조건 터지기 때문에 바로바로 값을 알아내고 vector에 추가해낼 수 있어야 한다. 2) 조건 찾기 - 결과 vector에 들어가는 값은 righr - left 만큼의 값이 들어가고, 끝까지 접근하기 때문에 right - left + 1 까지 반복한다. - 한 행씩 차례대로 보면 1행은 1,2,3,4,5, 2행은 2,2,3,4,5처럼 한 행씩 증가할 때마다 앞에 수..

● 소감 - 난이도에 비해 생각해야 하는건 단순해서 편함 ● 나의 풀이 더보기 1) 문제 이해 - 사고자 하는 물건의 수는 10개로 고정이고, discount 품목은 10개 이상이기 때문에 (품목의 수 - 10)번만 돌아주면 되고, 물건의 갯수와 수를 동시에 관리 해야하고 굳이 정렬을 할 필요는 없기 때문에 unordered_map을 사용. - 10개씩 묶인 map과 want의 품목을 비교하고 이 두 비교군은 수량과 품목이 동일 해야하기 때문에 그거에 맞게 조건을 만들었다. - 품목의 수가 최대 100,000개라 매 경우마다 비교품목을 새로 만드는게 부담스러울 듯 해서 동적계획법 방식도 생각해봤지만, 인덱스 접근 오류가 우려되서 일단 이번 풀이에선 배제했다. 2) 조건 찾기 - 우선 만들 건 (품목의 수..

● 소감 - 너저분해서 맘에 안드는데 대부분 이렇게 풀어서 의아하다. ● 나의 풀이 더보기 1) 문제 이해 - 사용된 카드를 제외하고 앞에 있는 카드가 goal의 문장을 만드는데 사용이 될 수 있는지, 없는지를 보는 문제. - 제공되는 배열도 2개밖에 없어서 각각 인덱스 접근만 하면 되는 거라 쉬웠던 문제 - queue를 사용해볼까도 싶었으나, 굳이 제공된 배열을 queue로 옮기는데 더 걸릴거 같아서 그냥 패스 2) 조건 찾기 - 두 배열의 각 인덱스를 따로 만든다. goal의 문장은 for문으로 확인 할 수 있고, if로 해당 goal의 string이 두 배열의 현재 위치가 있냐 없냐만 확인하면 되기 때문에 두 배열중 있었다면 해당 인덱스를 증가 시켜준다. - 증가를 하다보면 결국 배열의 인덱스를 초..

● 소감 - 오~ 이건 단방에 이해되진 않았지만, 좋은 문제였다 ● 나의 풀이 더보기 1) 문제 이해 - 환형 배열이기 때문에 0번 인덱스에서 끝 인덱스에 접근할 땐 문제가 없지만, 3번 인덱스에서 시작한다면 끝 인덱스에서 돌아 첫 인덱스로 돌아가야 한다는걸 고려해야한다. - 인덱스를 접근하면서 구했던 값을 계속 누적해가야 한다. 그래야 연속적인 수열의 합을 구하기 편해진다. - 요구하는건 만들어지는 총 합의 개수이고, 구한 합이 중복될 수도 있다. 중복 값을 처리해줄 수 있는 set를 사용하면 편하다. 2) 조건 찾기 - 환형 배열을 접근하는 것부터 중요한데, 나는 갖을 수 있는 조건이 순서대로 elements에 접근할 i, i번째에서 elements.size() 만큼 증가하는 j, 그리고 elemen..

● 소감 - 자료구조를 알면 확실히 도움이 된다. ● 나의 풀이 더보기 1) 문제 이해 - 점수는 score의 길이 만큼 제시되고, 차례차례 정렬이 이뤄지지만, k만큼의 갯수만 유지된다. - 그럼 추가가 될 때 k 갯수를 유지하기 위한 조건만 찾으면 되고, 매 차례 정렬이 이뤄져야 하기 때문에 삽입하면 알아서 정렬을 해주는 set을 사용해야겠다고 생각했다. - 한번 틀리고 깨달았지만 동일한 값이 또 제시될 수 있기 때문에 multiSet을 최종적으로 사용했다. 2) 조건 찾기 - 우선 사용할 multiSet을 만들고 score를 순차적으로 접근한다. 접근한 score은 차례대로 multiSet에 들어가게 되겠지만 k 개를 유지해야 하기 때문에 multiSet.size()와 k를 비교해준다. - multi..

● 소감 - 아... 3중 for문은 아닌거 같은데... ● 나의 풀이 더보기 1) 문제 이해 - 문제는 쉽다. 그냥 접근하고 동일하면 해당 배열과 동일한 위치의 score을 더하면 끝. 2) 조건 찾기 - 3중 for문이 무지 맘에 들진 않았지만, 처음 접근한 방식이 3중 for문이라... - 우선 2중 for문은 photo에 접근하기 위한 용도고, 또 그 안의 3번째 for문은 photo와 name을 비교하기 위한 용도로 사용했다. 어차피 yearning은 name의 인덱스와 같은 값을 공유하기 때문에 3번째 for문의 값으로도 접근할 수 있다. - 더한 값을 result 백터에 추가만 하면 끝 for(int i = 0; i < photo.size(); i++) { int count = 0; for(..

● 소감 - 어려워보였지만 어렵지 않았다. ● 나의 풀이 더보기 1) 문제 이해 - 처음 문제를 접했을 때 음~ 어떻게 풀지~ 했지만, 몇 개를 직접 만들어봤을 때 피보나치 수열이었다는 걸 알게 되었다. 코테에서 피보나치가 나왔다? 그럼 바로 다이나믹 프로그래밍으로 간다. 2) 조건 찾기 - 여느 피보나치 수열이 그렇듯 1, 2번째의 가정은 바로 도출하고, 그 이후론 계산을 하는 방식으로 간다. - n - 2 만큼의 for문을 돌려서 결과에 접근한다. 3) 나머지를 구하라? - 이런 문제의 경우 나머지를 구하라는 문제가 많은데 혹시 (a + b) % n 의 방식으로 나머지를 구하려고 하면 백방 틀린다. 처음에는 나머지를 어떻게 구하는지 오히려 헷갈렸지만, 지금은 공식처럼 외우고 있는 식이 있다. (a %..

● 소감 - 어릴 때 많이 보던 문제지만 이걸 일반화 시켜보는건 새로운 경험 ● 나의 풀이 더보기 1) 문제 이해 - 많이 해본 문제라 문제 자체는 쉽고 바꿔 마시는 병이 중요한게 아니라 얼마나 빈병을 가지고 있었느냐가 중요한 문제였다. 코드에서도 이 나머지 빈병을 유의했다. 2) 조건 찾기 - a,b,n의 매개변수를 이용해 조건을 잘 만드는게 중요한데, 우선 문제에서처럼 남은 빈병 n이 바꿔주는 빈 병 수 a보다 작으면 더 진행 할 수 없기 때문에, 이걸로 while문을 작성한다. - n / a를 하면 남은 빈 병 수로 몇번 바꿀 수 있는지 값을 구할 수 있고, 이를 새 병으로 바뀐 수 b와 곱하면 남은 빈 병으로 몇개의 새 병을 바꿨는지 구할 수 있다. 그리고 이 수를 result에 더한다. - 몇번..

● 소감 - 이게 왜 탐욕법인지 모르겠다. ● 나의 풀이 더보기 1) 문제 이해 - 탐욕법이라는데... 뭐 우선은 가장 가벼운 사람과 가장 무거운 사람을 비교해서 limit 안에 들어가면 보트에 태우면 되기 때문에 정렬이 필요하다고 생각했다. 정렬 후 left와 right를 증가 감소, 혹은 left만 증가 하는 식으로 비교하면 구할 수 있을 것이다. 2) 조건 찾기 - 정렬은 sort()로 간단히 할 수 있고, left는 0부터 right는 제시된 백터 people의 size의 -1 (배열순서니까)로 지정. - 그리고 2명의 보트를 태운 경우의 변수도 만들었다. sort(people.begin(), people.end(), greater()); int left = 0; int right = people..