[백준(BOJ) 2480] 주사위 세개 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/2480 문제 정보 입력 첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. 출력 첫째 줄에 게임의 상금을 출력 한다. 풀이 abs 메서드와 max 메서드를 이용해서 풀이했다. 소스 코드 #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); int a, b, c; cin >> a >> b >> c; int ans = 0; if (a == b && b == c) { ans = 10000 + a * 1000; } else if (abs(a - b) == 0 || abs(a - c) == 0 || abs(b - c) == 0) { if (a..
[백준(BOJ) 11729번] 하노이 탑 이동 순서 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/11729 문제 정보 입력 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다. 출력 두 번째 줄부터 수행 과정을 출력한다. 두 번째 줄부터 K개의 줄에 걸쳐 두 정수 A B를 빈칸을 사이에 두고 출력하는데, 이는 A번째 탑의 가장 위에 있는 원판을 B번째 탑의 가장 위로 옮긴다는 뜻이다. 풀이 재귀를 이용해서 해결할 수 있는 문제이다. 재귀를 공부할 때 귀납적 사고를 통해서 해결하라는 말이 있다. n-1개의 원판을 2번 으로 모두 옮긴 후, n번 원판을 3번으로 옮기고, 2번으로 옮겼던 n-1개의 원판을 3번으로 옮기면 된다. 소스 코드 #include using namespace std; void fun..
[백준(BOJ) 1697번] 숨바꼭질 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/1697 문제 정보 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 풀이 이 문제는 BFS의 응용 문제로 1차원에서의 BFS를 돌리는 문제이다. 소스 코드 #include using namespace std; #define X first #define Y second int dist[100002]; int n, k; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k; fill(dist, dist + 100002, -1); queue Q; Q.push(n); di..
[백준(BOJ) 4179번] 불! (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/4179 문제 정보 입력 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자들은 다음을 뜻한다. #: 벽 .: 지나갈 수 있는 공간 J: 지훈이의 미로에서의 초기위치 (지나갈 수 있는 공간) F: 불이 난 공간 J는 입력에서 하나만 주어진다. 출력 지훈이가 불이 도달하기 전에 미로를 탈출 할 수 없는 경우 IMPOSSIBLE 을 출력한다. 지훈이가 미로를 탈출할 수 있는 경우에는 가장 빠른 탈출시간을 출력한다. 풀이 이 문제는 BFS의 응용 문제로 시작점이 두 종류일 때 해결..
[백준(BOJ) 7576번] 토마토 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/7576 문제 정보 입력 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다. 토마토가 하나 이상 있는 경우만 입력으로 주어진다. 출력 여러분은 토마토가 모두 익을 때까지의 최소 날짜를 출력해야 한다. 만..
[백준(BOJ) 2178번] 미로 탐색 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/2178 문제 정보 입력 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. 출력 첫째 줄에 지나야 하는 최소의 칸 수를 출력한다. 항상 도착위치로 이동할 수 있는 경우만 입력으로 주어진다. 풀이 이 문제는 BFS의 응용 문제로 다차원 배열에서의 거리 측정 문제다! 소스 코드 #include using namespace std; #define X first #define Y second string board[102]; int dist[102][102]; // 거리를 저장할 배열 int n, m; int dx[4] = { 1, ..
[백준(BOJ) 1926번] 그림 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/1926 문제 정보 입력 첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m(1 ≤ m ≤ 500)이 차례로 주어진다. 두 번째 줄부터 n+1 줄 까지 그림의 정보가 주어진다. (단 그림의 정보는 0과 1이 공백을 두고 주어지며, 0은 색칠이 안된 부분, 1은 색칠이 된 부분을 의미한다) 출력 첫째 줄에는 그림의 개수, 둘째 줄에는 그 중 가장 넓은 그림의 넓이를 출력하여라. 단, 그림이 하나도 없는 경우에는 가장 넓은 그림의 넓이는 0이다. 풀이 이중 for문을 통해 시작좌표를 구하는 방법을 알고있으면 BFS 알고리즘으로 해결할 수 있다. 소스 코드 #include using namespace std; #defin..
[백준(BOJ) 2504번] 괄호의 값 (C++)
·
PS(Problem Solving)/C++
문제 링크 https://www.acmicpc.net/problem/2504 문제 정보 입력 첫째 줄에 괄호열을 나타내는 문자열(스트링)이 주어진다. 단 그 길이는 1 이상, 30 이하이다. 출력 첫째 줄에 그 괄호열의 값을 나타내는 정수를 출력한다. 만일 입력이 올바르지 못한 괄호열이면 반드시 0을 출력해야 한다. 풀이 스택을 이용해서 풀이할 수 있다. 굉장히 많은 고민을 해봐도 해결하기 힘들었다. 여는 괄호 중 소괄호가 나오면 2를 num에 곱하고 스택에 push 하고, 대괄호는 3을 num에 곱하고 스택에 push 한다. 그리고 닫는 괄호 중 소괄호가 나왔을 때 괄호 쌍이 올바르다면 곱해준 num 값을 sum에 더한다. 그러면 소괄호 쌍 1개를 계산한 것이므로 스택에서 pop해서 제거해준 후 소괄호..