전체 글
[C++] 백준 - 1987번 : 알파벳
https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제 풀이 이 문제는 dfs를 이용하여 푸는 문제입니다. 같은 알파벳을 만나지 않을 때 까지 깊게 탐색한 후, 같은 알파벳을 만나면 돌아옵니다(백트래킹) 같은 알파벳을 만날 경우는 visit이라는 bool 배열로 관리합니다. 알파벳 개수는 총 28개이므로 크기는 28개로 선언합니다. 이 알파벳을 방문하면 true 값을 줍니다. visit 배열을 보며 방문하지 않은 곳에만 dfs를 통해 재귀..
[C++] 백준 - 5430번 : AC
https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 풀이 이 문제는 시간초과가 나지 않게 구현을 해야한다는 점에 초점이 맞춰져있습니다. 배열을 그냥 뒤집거나, 삭제를 하거나(삭제를 하게 되면 O(1)에 이뤄지는게 아니라 삭제된 공간 만큼 뒤의 요소들을 이동시켜야 합니다) 하는 경우엔 시간초과가 날 가능성이 있습니다. 시간초과에 관련한 글은 아래 글에서 확인해주세요! https://www.acmicpc.net/board/view/25456 글 읽기 - ★☆★☆★ [필독] AC FAQ ★☆★☆★ 댓글을..
[C++] 백준 - 1202 : 보석 도둑
https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제 풀이 이 문제는 가장 가격이 높은 순서대로 보석들을 정렬해서, 높은 순서대로 가방에 넣으면 됩니다. 이 때 넣을 가방은 현존하는 가방중에서 1. 가장 작으면서 2. 보석을 담을 수 있어야 합니다. 배열에 담으면서 매번 정렬하면서 진행한다면, 시간초과가 날 것입니다. 시간제한은 1초이므로 O(NlogN) 의 시간복잡도를 가질 수 있게..
[C++] 백준 - 7662 : 이중 우선순위 큐
https://www.acmicpc.net/problem/7662 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적 www.acmicpc.net 문제 풀이 가장 큰 값과 가장 작은 값을 명령어에 따라 삭제해야 하는 문제입니다. 우선순위 큐라는 단어에 휩싸여서 처음에는 max heap 형태의 pq를 통해 top(max값) 을 구하고, 마지막 원소를 제외하고 또 다 pop을 하여 min값을 구하는 식으로 구현했는데, 그런식으로 하면 시간초과가 났습니다. min값을 구하기 위해서 기존 원소들을 다 제거하는 방식이었으므로 logN + logN..