| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- C
- 2018 KAKAO BLIND RECRUITMENT
- cpp
- 백준
- 그리디
- 통신 인터페이스
- 컴퓨터비전
- 프로그래머스
- java
- JavaScript
- lv2
- 임베디드
- 컴퓨터 비전
- level3
- 누적합
- 동적계획법
- 우선순위큐
- 구현
- 다이나믹프로그래밍
- 이분탐색
- dfs
- c++
- dp
- 다이나믹 프로그래밍
- 코틀린
- level2
- 자바
- kotlin
- BFS
- Stack
- Today
- Total
목록cpp (4)
코드를 느껴바라
문제 링크성공 여부(걸린 시간): 성공(38분 40초)아이디어이 문제는 주어진 가수들의 선후 관계를 만족하도록 전체 순서를 정하는 문제로,기본적인 위상 정렬(Topological Sort) 개념을 그대로 적용하는 문제이다.각 PD가 제시한 가수들의 순서는A → B → C 와 같이 앞에 있는 가수가 반드시 뒤에 있는 가수보다 먼저 나와야 한다는 방향 그래프의 간선 정보로 해석할 수 있다.따라서 모든 순서 정보를 간선으로 변환한 뒤,진입 차수(indegree)를 기반으로 하는 Kahn 알고리즘 방식의 위상 정렬을 수행하면 된다.1️. 그래프 구성입력으로 주어지는 한 PD의 순서가3 1 4 3이라면,이는1 → 41 → 34 → 3과 같은 관계를 의미한다.즉, 앞에 등장한 가수는 뒤에 등장한 모든 가수보다 먼저..
문제 링크성공 여부(걸린 시간): 성공 (19분 25초)아이디어문제 자체는 간단하다. 세 용액의 합이 0에 제일 가까운 값을 만드는 세 용액을 구해 오름차순으로 출력하는 것이다.그렇게 하기 위해서는 우선 이분탐색 또는 투포인터로 가능했는데 나는 투포인터를 사용해서 풀어주었다. 그렇게 하기 위해서는 우선 입력 받은 값들을 정렬해주고 첫번째 용액을 for문으로 선택 후 나머지 두 배열을 현재 바로 다음 순서의 용액과 마지막 용액을 각각 left, right로 잡고 sum이란 변수에 arr[i], arr[left], arr[right]의 합을 저장해주고 sum의 값에 따른 분기를 통해서 다음 동작을 제어한다. 1. 만약 sum이 0이다?-> 그럼 최소값을 이루는 조합 중에 하나임이 틀림없기에 바로 출력해주고..
문제 링크성공 여부(걸린 시간): 성공 (36분 13초)아이디어이 문제는 이분탐색 또는 투포인터로 풀 수 있는 문제였는데 나는 문제를 보고이분탐색에 대해서는 생각이 안났고 투포인터로 풀 수 있겠다고 생각해서 투포인터로 풀게 되었다. 우선 간단하게 생각하면 x, y, z 번째 수의 합으로 k번째 존재하는 수를 만들어낼 수 있다면 그의 최대값을 구하는 것이다.처음에는 여러 방법에 대해서 생각하고 시간복잡도를 고려해보았다.1. 세 수를 전부 정해놓고 탐색 (완전탐색)방법: x, y, z를 전부 고정하고 가능한지 확인반복문 3중 → O(N³)N이 1000이면→ 1000³ = 10억 번 연산→ 시간초과 확정👉 현실적으로 불가능한 방법2. 두 수를 정하고 나머지를 투포인터x, y 고정 → O(N²)z와 k를 투포..
문제 링크성공 여부 (걸린 시간): 성공 (23분)아이디어문제를 읽다보니 그때 그때 상황마다 최선의 선택을 취하므로 그리디문제임을 알 수 있었고 그리디하게 풀어보았다. 로직은 손의 시작과 끝 지점을 갱신해주면서 범위를 벗어나는 경우에 갱신과 카운트를 해주면 됨 일단 나는 손의 시작과 끝 지점을 min_max pair를 통해서 관리해줬다. 초기와 각 손을 옮기고 난 후 첫 시작은 옮기거나 시작했던 건반으로 초기화를 해준다.예) 3으로 시작했다? {3, 3}, 만약 7에서 옮겨야한다? {7, 7} 크게 생각할 분기는 2가지이다.1. 새로 입력받은 건반이 현재 손의 최대값보다 큰 경우2. 새로 입력받은 건반이 현재 손의 최솟값보다 작은 경우최소 이상, 최대 이하인 경우에는 넘어가면 된다. (왜냐면 손을 옮길..
