본문 바로가기

전체 글

(178)
문자판 (2186번) - 백준 (BOJ) https://www.acmicpc.net/problem/2186 2186번: 문자판 첫째 줄에 N(1 ≤ N ≤ 100), M(1 ≤ M ≤ 100), K(1 ≤ K ≤ 5)가 주어진다. 다음 N개의 줄에는 M개의 알파벳 대문자가 주어지는데, 이는 N×M 크기의 문자판을 나타낸다. 다음 줄에는 1자 이상 80자 이하의 www.acmicpc.net 백준 - 문자판 (2186번) 난이도 : Gold 3 알고리즘&자료구조 : Dynamic Programming (동적계획법) 시간복잡도 (Time Complexity) : O( N * M * K * len(영단어) ) ★ 핵심 Idea ★ ◎ 주어진 영단어의 철자를 앞에서부터 하나씩 확인하면서, 현재 철자가 위치하는 각 좌표의 경우의 수를 기록해나간다. < 전..
비드맨 (19590번) - 백준 (BOJ) https://www.acmicpc.net/problem/19590 19590번: 비드맨 구슬을 엄청 좋아하는 비드맨이 있다. 구슬만 보면 갖고 싶어 하는 비드맨은 오늘도 갖고 싶은 구슬을 발견했다. 그러나 비드맨은 현재 구슬을 너무 많이 갖고 있기 때문에 더 이상 구슬을 가질 www.acmicpc.net 백준 - 비드맨 (19590번) 난이도 : Gold 1 알고리즘&자료구조 : Greedy (그리디) 시간복잡도 (Time Complexity) : O(N) ★ 핵심 Idea ★ ◎ 크게 아래의 두 가지 경우로 나눌 수 있다. 1. 각 종류 별 구슬 갯수의 최댓값이, 나머지 구슬 갯수들의 합보다 크다면 [최댓값 - (나머지들의 합)] 이 최소로 남는 구슬 갯수가 된다. 2. 위의 1에 해당하지 않는다면,..
벽 부수고 이동하기 4 (16946번) - 백준 (BOJ) https://www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net 백준 - 벽 부수고 이동하기 4 (16946번) 난이도 : Gold 2 알고리즘&자료구조 : DFS (깊이우선탐색) ★ 핵심 Idea ★ ◎ 벽이 아닌 빈 곳들을 그룹화하고, 각 그룹의 칸 수를 기록한다. 이후 각 벽을 기준으로 상하좌우 빈 칸의 그룹들을 확인하고, 서로 다른 그룹들의 칸 수를 모두 더하고 마지막에 1을 더해주면, 해당 벽을 부쉈을 때 이동할 수 있는 칸의 수..
트리의 높이와 너비 (2250번) - 백준 (BOJ) https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 백준 - 트리의 높이와 너비 (2250번) 난이도 : Gold 2 알고리즘&자료구조 : DFS (깊이우선탐색) ★ 핵심 Idea ★ ◎ 루트 노드를 기준으로, 트리의 각 깊이 별 노드의 최소 최대 위치를 DFS로 구한다. import sys input = sys.stdin.readline class Tree(): def __init__(self, N): self..
구두 수선공 (14908번) - 백준 (BOJ) https://www.acmicpc.net/problem/14908 14908번: 구두 수선공 최소 보상금을 지불하는 작업 순서를 출력해야 한다. 모든 작업은 입력에서의 번호(1~N)로 표시해야 한다. 모든 정수는 한 줄로 표시해야 하며, 각 작업은 공백 문자로 구분한다. 여러 가지 해답 www.acmicpc.net 백준 - 구두 수선공 (14908번) 난이도 : Gold 1 알고리즘&자료구조 : 그리디 (Greedy) & 정렬 (Sorting) 시간복잡도 (Time Complexity) : O( N logN ) ★ 핵심 Idea ★ ◎ 보상금 S가 작업 소요 일수 T에 비해 클수록 먼저 수선해야 한다. (Greedy) [(2, 2), (3, 4)] 두 개의 수선할 구두가 있다고 하면, 아래와 같이 (3..
돌 그룹 (12886번) - 백준 (BOJ) https://www.acmicpc.net/problem/12886 12886번: 돌 그룹 오늘 강호는 돌을 이용해 재미있는 게임을 하려고 한다. 먼저, 돌은 세 개의 그룹으로 나누어져 있으며 각각의 그룹에는 돌이 A, B, C개가 있다. 강호는 모든 그룹에 있는 돌의 개수를 같게 만들려 www.acmicpc.net 백준 - 돌 그룹 (12886번) 난이도 : Gold 4 알고리즘&자료구조 : BFS (너비 우선 탐색) ★ 핵심 Idea ★ ◎ 주어진 초기 숫자 3개로 시작해서, 3개의 수가 모두 같아질 때까지 BFS를 활용해 연산을 진행해본다. class Rocks(): def __init__(self, A, B, C): self.is_eq = 0 if A==B==C: self.is_..
소가 길을 건너간 이유 4 (14464번) - 백준 (BOJ) https://www.acmicpc.net/problem/14464 14464번: 소가 길을 건너간 이유 4 첫 줄에 C와 N이 주어진다. 다음 C줄에는 T1…TC가 주어지고, 그 다음 N줄에는 Aj와 Bj(Aj ≤ Bj)가 주어진다. A, B, T는 모두 최대 1,000,000,000인 음이 아닌 정수이고, 같을 수도 있다. www.acmicpc.net 백준 - 소가 길을 건너간 이유 4 (Why Did the Cow Cross the Road (Silver)) (14464번) 난이도 : Gold 1 알고리즘&자료구조 : 우선순위 큐 (Priority Queue) & 정렬 (Sorting) 시간복잡도 (Time Complexity) : O( (N+C) * log(N+C) ) ★ 핵심 Idea ★ ◎ 소..
레이저 통신 (6087번) - 백준 (BOJ) https://www.acmicpc.net/problem/6087 6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 백준 - 레이저 통신 (Laserphones) (6087번) 난이도 : Gold 3 알고리즘&자료구조 : BFS (너비 우선 탐색) & Simulation (구현) ★ 핵심 Idea ★ 첫 번째 소부터 특정 좌표까지 통신하는데 필요한 거울의 개수를 BFS로 구하면서, 두 번째 소까지 이동하면 된다. import sys input = sys.stdin.readline cl..