구현 135

백준 16236번: 아기 상어

https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 1×1 크기의 공간을 노드로, 상하좌우로 인접한 칸 사이의 관계를 에지로 보면 이 문제는 상어의 좌표에서 먹을 수 있는 물고기의 좌표까지 bfs를 여러 번 실행하는 문제이다. 이 때 먹을 수 있는 물고기를 발견한 경우, bfs를 종료하지 않고 같은 거리에 있는 모든 좌표를 탐색해야 한다. #include #include #include using namespace std; #define M..

백준 15792번: A/B - 2

https://www.acmicpc.net/problem/15792 15792번: A/B - 2 첫째 줄에 A와 B가 주어진다. (0 < A, B ≤ 10,000) www.acmicpc.net A와 B를 입력받아 A / B를 출력하되, 손으로 소수점 나눗셈 계산을 하듯이 소숫점 계산을 진행한다. #include int main() { // A, B: 두 수 A와 B를 저장할 공간, i: 소수점 연산에 사용할 변수 int A, B, i = 0; scanf("%d %d", &A, &B); // 소수점 앞의 정수 부분을 출력한다 printf("%d", A / B); // A % B가 0이 아니라면, 즉 A / B의 결과가 정수가 아니라면 if (A % B) { // A를 B로 나눈 나머지를 A에 저장한다 A ..

백준 15686번: 치킨 배달

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 치킨집을 m개 골랐을 때 도시의 치킨 거리가 dist_m이라면, 여기서 치킨집을 하나 더 추가했을 때 도시의 치킨 거리 dist_(m + 1)은 dist_m보다 작거나 같다. 따라서 구하고자 하는 값은 치킨집을 M개 골랐을 때의 도시의 치킨 거리의 최솟값이다. 도시의 치킨 거리를 최소화하기 위해 치킨집을 고르는 방법은 특별히 알려진 게 없으므로, 가능한 경우를 모두 확인해보아..

백준 15680번: 연세대학교

https://www.acmicpc.net/problem/15680 15680번: 연세대학교 연세대학교의 영문명은 YONSEI, 슬로건은 Leading the Way to the Future이다. 이를 출력하는 프로그램을 작성해보도록 하자. www.acmicpc.net 입력에 따라 영문명 혹은 슬로건을 출력한다. #include int main() { int N; // 입력에 따라 영문명 혹은 슬로건을 출력 scanf("%d", &N); printf("%s\n", N ? "Leading the Way to the Future" : "YONSEI"); return 0; }

15596번: 정수 N개의 합

https://www.acmicpc.net/problem/15596 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net int형 벡터 a를 인자로 받아 a의 모든 원소를 더하는 함수를 작성한다. #include long long sum(std::vector &a) { long long ans = 0; // a의 모든 성분을 더한 뒤 반환 for (auto i : a) ans += i; return ans; }

15552번: 빠른 A+B

https://www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net 입출력 방식에 유의하며 각 테스트 케이스의 정답을 출력한다. #include using namespace std; int main() { // 입출력 속도 향상 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // T: 테스트 케이스의 개수, A, B: 더할 두 수 int T, A, B; // 테스트 케이스를 입력받아 각 테스트 케이스의 결과를 출력 for..

14681번: 사분면 고르기

https://www.acmicpc.net/problem/14681 14681번: 사분면 고르기 점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다. www.acmicpc.net 좌표를 입력받은 뒤 사분면을 판정해 출력한다. #include int main() { // y, x: 사분면을 판정할 점의 좌표, quad: 사분면의 번호 int y, x, quad[2][2] = {{2, 1}, {3, 4}}; // 좌표를 입력받아 해당 좌표의 사분면을 판정해 출력 scanf("%d %d", &x, &y); printf("%d\n", quad[y 0]); return 0; }

14656번: 조교는 새디스트야!!

https://www.acmicpc.net/problem/14656 14656번: 조교는 새디스트야!! 첫 번째 줄에 헌우네 반 학생의 수 N이 주어진다. (1 ≤ N ≤ 20,000) 두 번째 줄에 학생들의 번호가 현재 줄을 서있는 순서대로 주어진다. (1 ≤ 번호 ≤ N) 중복되는 번호는 없다. www.acmicpc.net 학생의 수를 입력받은 뒤, 각 학생의 번호를 입력받으며 번호와 순번이 일치하지 않는 학생의 수를 계산해 출력한다. #include using namespace std; int main() { // 입출력 속도 향상 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // N: 학생의 수, num: 각 학생의 번호, ans: 맞..

14500번: 테트로미노

https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 별다른 테크닉 없이 순수 구현만으로 해결하는 문제이다. #include using namespace std; #define MAX_N 500 int N, M; short t[MAX_N + 1][MAX_N + 1]; // cmp3의 이름이 max일 때 ‘__comp’ cannot be used as a function 에러 발생 int cmp2(int a, int b) { return a > b ?..

백준 13460번: 구슬 탈출 2

https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 보드를 기울여 구슬을 움직이는 기능을 구현한 뒤, 보드를 10번 움직여 빨간 구슬만 구멍에 넣을 수 있다면 보드를 기울이는 최소 횟수를, 그렇지 않다면 -1을 출력한다. #include typedef unsigned int ui; #define MAX_N 10 #define MAX_TILT 10 #define INF 0xffffffff class ..