본문 바로가기

Problem Solving228

[Problem Solving] BOJ 2665: 미로만들기 문제 출처: https://www.acmicpc.net/problem/2665 (0, 0)부터 (n - 1, n - 1)까지 도착하기 위해 지나가야 할 최소한의 검은 방의 수를 구하는 문제이다. cost[i][j]를 (i, j)까지 도착하기 위해 지나가야 할 최소한의 검은 방의 수라고 하자.cost[0][0]을 0으로 설정하고 bfs를 수행한다. 현재 위치에서 다음 위치로 넘어갈 때 그 공간이 흰 방이라면,cost[next.y][cost.x] > cost[cur.y][cur.x] 일 경우 cost[next.y][cost.x] = cost[cur.y][cur.x]로 갱신하고 큐에 next를 넣는다. 현재 위치에서 다음 위치로 넘어갈 때 그 공간이 검은 방이라면,cost[next.y][cost.x] > co.. 2025. 10. 1.
[Problem Solving] BOJ 1509: 팰린드롬 분할 문제 출처: https://www.acmicpc.net/problem/1509 문자열을 팰린드롬으로 분할하는데, 분할의 개수의 최솟값을 구하는 문제이다. dp[i]는 s[0..i]의 팰린드롬 분할의 개수의 최솟값이다. dp[i]는 s[0..i] 자체가 팰린드롬이라면 1이 된다.dp[i]는 j 이 점화식을 위해서 s[i.. j]가 팰린드롬인지 아닌지 판별하는 2차원 배열을 만들어야 한다.isPal[i][j]는 s[i..j]가 팰린드롬인지에 대한 여부이다.isPal[i][i]는 항상 True이다.isPal[i][i + 1]는 s[i] == s[i + 1]이라면 True이다...isPal[i][i + length]는 s[i] == s[i + length]이고 isPal[i + 1][i + length - 1.. 2025. 9. 30.
[Problem Solving] BOJ 2615: 오목 문제 출처: https://www.acmicpc.net/problem/2615 오목 게임을 진행한 바둑판이 주어졌을 때, 검은 돌이 이겼는지, 흰 돌이 이겼는지 판정하는 문제다. 이긴 돌의 연속된 다섯 개의 바둑 알 중 가작 왼쪽의 바둑알의 좌표를 출력한다. 6개 이상으로 바둑알을 연속으로 놓았을 경우는, 승리로 판정하지 않는다. 일단 오목에서 이겼을 경우, 바둑알을 연속 5개를 놓는데, 놓는 방식은 4가지 방식이 있다.1. 세로로 5개2. 가로로 5개3. 오른쪽 대각선 아래로 5개4. 오른쪽 대각선 위로 5개이를 탐지하기 위해서, dx와 dy를 다음과 같이 정의한다.dx = [0, 1, 1, -1]dy = [1, 0, 1, 1] (0, 0)부터 (18, 18)까지 돌면서 위 네 가지 케이스가 있는지 찾.. 2025. 9. 29.
[Problem Solving] 프로그래머스: 2022 KAKAO TECH INTERNSHIP - 등산코스 정하기 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/118669?language=python3 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 시작점에서 봉우리에 도착할때 까지 거치는 간선의 가중치의 최댓값의 최솟값을 구하는 문제이다. Dijkstra 알고리즘을 응용해서 푸는 문제다. 기존 Dijkstra 알고리즘은 다음과 같다.dists[gate] = 0heapq.heappush(heap, (dists[gate], gate))while len(heap) != 0: cur_w, cur_n = heapq.heappop(heap) if di.. 2025. 9. 28.
[Problem Solving] 프로그래머스: 2018 KAKAO BLIND RECRUITMENT - [3차] 자동완성 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/17685 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 전형적인 Trie 문제이다. words안에 있는 word들을 모두 Trie에 넣는다. 그리고 Trie에 존재하는 노드의 방문 횟수를 각 노드에 적는다. go, gone, guild를 예시로 들면 각 알파벳의 방문 횟수는 다음과 같이 된다.g:3o:2n:1e:1u:1i:1l:1d:1 Trie에서 각 단어를 탐색하는데, 다음 노드로 내려갈 때마다 cnt를 증가시킨다. 그러다가 노드의 방문 횟수가 1이 된다면, 그 다음 노드는 방문 안해도 된다... 2025. 9. 27.
[Problem Solving] 프로그래머스: 2023 KAKAO BLIND RECRUITMENT - 표현 가능한 이진트리 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/150367 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 십진수를 이진수로 바꾼다.2. 최소한의 더미노드를 추가해서 포화 이진트리를 만든다.3. BFS를 수행하는데, 부모노드가 더미노드인데, 그 노드의 자식 노드가 더미노드가 아닌 경우는 표현 불가능이므로 0을 반환한다. #include #include #include #include #include using namespace std;struct Node{ int parent; int left; int right; i.. 2025. 9. 24.
[Problem Solving] 프로그래머스: 2019 카카오 개발자 겨울 인턴십 - 호텔 방 배정 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/64063 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr Union Find 알고리즘을 활용하는 문제이다. 입력이 [1, 3, 4, 1, 3, 1] 로 주어진다면출력은 [1, 3, 4, 2, 5, 6]이 되는데, 배정받고자 하는 방이 예약 가능하다면, 그 방과 오른쪽 방을 Union하는 것이다. Union된 Set의 부모 노드로 갈수록 숫자가 커져야 한다.입력에서 1번, 3번, 4번 방을 배정받고자 한다면,parent[1] = 2parent[3] = 4parent[4] = 5이 된다. 또 1번 방.. 2025. 9. 23.
[Problem Solving] 프로그래머스: 2017 카카오코드 예선 - 보행자 천국 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/1832 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 두개의 dp테이블인 down과 right를 만들고, down[m-1][n-1] + right[m-1][n-1]을 더해서 MOD로 나눈 값을 구하는 문제이다. down[i][j]는 (i,j)에 위 -> 아래 방향으로 이동해서 도착할 수 있는 경우의 수이고, right[i][j]는 (i,j)에 왼쪽 -> 오른쪽 방향으로 이동해서 도착할 수 있는 경우의 수이다. 우선 down[0][0] = 0, right[0][0] = 1 로 설정해 (0,0)에는.. 2025. 9. 22.
[Problem Solving] 프로그래머스: 2021 KAKAO BLIND RECRUITMENT - 광고 삽입 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/72414?language=cpp 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 우선 시간을 "00:00:00" 단위에서 초 단위로 모두 변경해서 풀기 쉽게 만든다. 그 다음 timeline이라는 vector에 시청자들의 시청 시작 시점에 1을 더하고, 시청 종료 시점에 1을 줄인 후에, 누적합을 통해서, 각 i 시간대에 몇 명의 시청자들이 시청하는지 기록한다. int play_time_int = convert_to_int(play_time);int adv_time_int = convert_to_.. 2025. 9. 21.
[Problem Solving] 프로그래머스: 2023 KAKAO BLIND RECRUITMENT - 미로 탈출 명령어 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/150365 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr (x, y) -> (r, c)로 k step 만에 이동하는 경로 중, 사전 순으로 첫번째인 경로를 구하는 문제이다. 다른 격자를 중복으로 방문가능하다. (x, y) -> (r, c)의 최단 경로의 길이는 abs(r - x) + abs(c - y)인데, 이를 dist라고 하자.남은 step 수인 k가 dist보다 작으면 도달 불가능하다.또는남은 step 수인 k가 dist보다 크면서 차이가 홀수이면 (r, c)에 도달 불가능하다.왜냐하면 (.. 2025. 9. 20.
[Problem Solving] 프로그래머스: 2019 KAKAO BLIND RECRUITMENT - 길 찾기 게임 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42892?language=java 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 트리 구성 + 트리 순회를 알아야 풀 수 있는 문제다. 우선 트리를 구성해야한다.트리를 구성하기 전에, nodeinfo에는 노드의 번호가 나와있지 않기 때문에, nodeinfo_list에 노드 번호까지 포함하여 새로 만든다. y좌표 기준으로 내림차순 정렬, y좌표가 같다면 x좌표 기준으로 오름차순 정렬한다.높은 레벨 -> 낮은 레벨, 같은 레벨에서는 왼쪽 -> 오른쪽으로 정렬해야 트리를 구성하기 편하기 때문이다. N.. 2025. 9. 14.
[Problem Solving] 프로그래머스: 2022 KAKAO BLIND RECRUITMENT - 양과 늑대 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/92343?language=cpp 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 늑대의 수 >= 양의 수가 된다면 모든 양이 잡아먹힌다는 가정 하에, 루트 노드에서 시작하여 가져올 수 있는 최대의 양의 수를 구하는 문제이다. 문제 설명을 보면, 양은 0번 루트 노드에서 시작하여 0 -> 1 -> 4로 이동했을 때, 이후에 갈 수 있는 방문하지 않은 노드는 2, 3, 6, 8 번이라고 한다. 현재 노드의 자식 노드로만 갈 수 있는게 아니라, 방문 했던 노드의 자식 노드도 갈 수 있는 후보군에 들어간.. 2025. 9. 13.
[Problem Solving] 프로그래머스: 2021 카카오 채용연계형 인턴십 - 표 편집 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 양방향 연결 리스트에 대한 개념이 필요한 문제이다. 초기의 표는 양방향 연결 리스트 형태로 주어진다고 생각하면 된다.prv[i]는 i번째 노드를 가리키는 노드의 인덱스,nxt[i]는 i번째 노드가 가리키는 노드의 인덱스이다.초기에는 모든 i에 대해 prv[i] = i - 1, nxt[i] = i + 1이다. cur는 노드의 인덱스가 저장되는 커서이다. U나 D 명령어의 경우,X만큼 prv/nxt로 이동하면 된다. (cur = pre[cur].. 2025. 9. 13.
[Problem Solving] 프로그래머스 2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/92344?language=python3 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 단순하게 풀려고 하면 시간초과가 날 수 있으므로, 누적합으로 최적화 해야 한다. 4 * 5 행렬에 board가 다음과 같이 있다고 가정하자.5 5 5 5 55 5 5 5 55 5 5 5 55 5 5 5 5(0, 1)부터 (3, 3)까지 공격하여 1 만큼 건물의 내구도를 낮춘다고 하자.우선 (0, 1)에 -1을 해주고, (0, 4)와 (4, 1)에는 +1을 해주고, (4, 4)에는 -1을 해준다.0 -1 0 0 .. 2025. 9. 10.
[Problem Solving] 프로그래머스: 2018 KAKAO BLIND RECRUIT - [1차] 셔틀버스 문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/17678?language=java 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 09:00 부터 n회 t분 간격으로 오고, m인승인 셔틀 버스가 있다고 할 때,콘이 셔틀을 타고 사무실로 갈 수 있도록 하는 셔틀 정류장 도착 시각 중 가장 늦은 시각을 구하는 문제이다. 같은 시각에 도착한 크루들이 있다면 콘은 맨 뒤에 선다. 콘은 가능한 늦게 나와서 간당간당 하게 사무실로 도착해야 하므로 마지막 버스를 타는 것을 목표로 해야 한다. 문제를 풀기 용이하게 하기 위해서 "HH:MM"로 표현된 시각을 .. 2025. 9. 9.