본문 바로가기

전체 글168

[백준] 23564 - 재귀 문자열 by C++ https://www.acmicpc.net/problem/23564 23564번: 재귀 문자열 $(c, \{7\}), (cc, \{1,3\}), (ccc, \{1,1,1\})$ 등이 모두 정답이다. www.acmicpc.net 최근들어 제일 오래걸린 문제였다.... 오늘따라 머리가 안굴러가긴했는데, 그렇다보니 잘못된 방식 고집하면서 날린 시간도 너무 길었다. 아닌 것 같으면 다른 방식 생각해보는 습관도 가지자.... 알고리즘 방식 X1 = s1...s1 X2 = [s1...s1]s2...[s1...s1] X3 = {[s1...s1]s2...[s1...s1]}s3{[s1...s1]s2...[s1...s1]} X1, X2, X3를 각각 풀어서 작성하면 위와 같다. 이를 기반으로 X3를 통해 S, A 집합을 .. 2023. 1. 27.
[백준] 11265 - 끝나지 않는 파티 https://www.acmicpc.net/problem/11265 11265번: 끝나지 않는 파티 입력의 첫 번째 줄에는 파티장의 크기 N(5 ≤ N ≤ 500)과 서비스를 요청한 손님의 수 M(1 ≤ M ≤ 10,000) 이 주어진다. 각각의 파티장은 1번부터 N번까지 번호가 붙여져 있다. 다음에는 N개의 줄에 걸 www.acmicpc.net 알고리즘 방식 플로이드 워셜 방식으로 구현이 가능한 알고리즘이며 다익스트라를 활용해도 구현이 가능한 알고리즘이였다. 먼저 정점의 개수는 V, 간선의 개수는 E이며, V^2 >= E가 성립한다. 다익스트라의 경우 시간복잡도는 O(ElogV)이다. 플로이드 워셜의 경우 시간복잡도는 O(E^3)이다. 다익스트라를 활용한 풀이의 경우 기본 다익스트라 알고리즘에 for문.. 2023. 1. 20.
[백준] 1520 - 내리막 길 https://www.acmicpc.net/problem/1520 1520번: 내리막 길 첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. www.acmicpc.net 알고리즘 방식 DFS를 활용한 DP 방식이였다. 코드를 보면 DP배열을 모두 -1로 초기화하는 부분이 있는데, 이 부분이 핵심이다. 먼저 dp배열의 값은 해당 위치에서 도착지점에 도달할 수 있는 경우의 수이다. 따라서 특정 위치가 0이라면, 해당 위치에서 도착지점에 도달할 수 있는 경우는 0이라는 의미다. 이는 즉, 해당 위치에서 도착 지점에 도달할 수 있는지를 이미 탐색을 했다라는 의미도 된다.. 2023. 1. 9.
[백준] 18870 - 좌표 압축 https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 알고리즘 방식 간단히 예제를 통해 생각하면, [2, 4, -10, 4, -9] 내림차순 정렬과 중복 제거 후 전체 크기에서 현재 인덱스의 값을 빼주면 해당 인덱스의 좌표 압축 결과였다. 중복 제거는 헤더의 unique 함수를 통해 O(N)으로 구현할 수 있다. (unique 함수는 중복 제거된 벡터의 마지막 값을 iterator로 반환한다.) 따라.. 2022. 12. 30.
[백준] 3079 - 입국심사 by C++ https://www.acmicpc.net/problem/3079 3079번: 입국심사 첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ 1,000,000,000) 다음 N개 줄에는 각 심사대에서 심사를 하는데 걸리는 시간인 Tk가 주어진다. (1 ≤ Tk ≤ 109) www.acmicpc.net 전형적인 이분탐색 문제였다. 이분탐색을 제대로 이해하질 못해서, 이 문제를 통해 원리를 어느정도 이해할 수 있었다. 알고리즘 방식 이분 탐색의 대상은 상근이와 친구들이 심사를 마치는데 걸리는 시간이였다. (즉 정답) 시작값(st) = 0, 끝값(en) = Tk의 최대값 * M으로 지정해주었다. (시작값 또한 Tk의 최소값 * M으로 지정해도 되지만, 의미 없는 것 같아 생략) 1. .. 2022. 12. 22.
[백준] 2064 - IP주소 https://www.acmicpc.net/problem/2064 2064번: IP 주소 네트워크에 연결되어 있는 컴퓨터들은 각각 하나의 IP 주소를 갖게 된다. 그리고 이러한 IP 주소를 갖는 컴퓨터들이 여러 개 모여서 하나의 IP 네트워크를 구성하게 된다. IP 네트워크는 ‘네트워 www.acmicpc.net 비트마스킹 방식을 사용하지 않으면 구조적으로 시간 초과가 날 수밖에 없는 문제였다. 알고리즘 방식 1. C++에는 Split함수가 없으므로 직접 구현 2. 입력된 IP주소를 '.'을 기준으로 Split 하여 4개의 숫자를 vector ip에 저장 3. 네트워크 주소는 32-m자리까지 고정이고, 이후가 랜덤 값이므로, 입력된 ip주소들 간에 차이가 발생하는 최소 자리수를 구한다. 4. 3.에서 구.. 2022. 12. 16.