백준/일반 문제 19

[백준/BOJ] 21609 - 상어 중학교 (c++)

https://www.acmicpc.net/problem/21609 BFS를 곁들인 구현문제였다... 저는 문제를 잘 못읽어서 다 풀어놓고도 몇분 헤맸던 문제였어요 이 문제는 문제에 써있는 순서대로 블럭그룹을 찾고, 블럭그룹을 지우고, 중력을 작용하고, 90도 반시계회전하고, 중력을 작용하는것을 함수를 짜서 순서대로 돌아가도록 하면 되는 문제였다. 주의할점으로는 첫번째, 기준블럭을 정하는 규칙과 블럭그룹을 정하는 규칙을 정확히 이해해야한다. 처음에 이것을 잘못 이해해서 몇분 헤맸습니다..ㅠㅠ 두번째, 무지개색깔 블럭을 검은블럭을 뺀 나머지 색깔블럭들도 접근할 수 있도록 해야한다. 저는 무지개색깔을 어떤 색깔이 접근을 했다면 다시 초기화하여 다른 색깔도 접근을 할 수 있도록 작성했습니다 소스코드 #incl..

[백준/BOJ] 20057 - 마법사 상어와 토네이도 (c++)

이 문제는 구현문제로 어떻게 구현할지 생각하는데 조금 생각해봐야하는 문제이다. 특별하게 생각해야할 점은 아래의 두점이다. 토네이도가 이동하는 경로 토네이도는 1칸가고 방향바꾸고, 1칸가고 방향바꾸고, 2칸가고 방향바꾸고, 2칸가고 방향바꾸고, 3칸가고 방향바꾸고.... 이러한 규칙을 통해 토네이도의 가는 경로를 쉽게 구현해 낼 수 있었다. 토네이도의 방향에따라 달라지는 모래가 날리는 좌표 토네이도가 상하좌우 방향에 따라 모래가 날리는 좌표가 조금씩 달라지는데 한번 모든 방향 4가지의 좌표를 계산해봐서 연관성을 찾아본다면 방향이 180도 다른 것의 좌표는 x축 또는 y축 대칭이라는 것을 알 수 있다. 방향이 90도 다른 것들의 좌표는 y=x(45도의 직선) 대칭이라는 것을 알 수 있다. 따라서 하나의 방향..

[백준/BOJ] 19238 - 스타트 택시 (c++) (BFS)

택시가 태울 다음 손님을 BFS로 찾은 후 다음 손님까지 태우러 가는 거리 + 손님의 도착지 까지의 거리를 연료에서 뺀 후 또 다음 손님을 구하는 이 방식을 반복하면 되었다. 주의할 점은 연료가 0일때 손님이 있는지 찾아 보는 것이랑 택시에서 손님까지, 손님의 출발지부터 손님의 목적지까지 갈 수 있는지도 체크를 하여야했다. #include #include #include #include #define pii pair using namespace std; struct client { int clix, cliy, desx, desy; bool isArrived; } Client[400]; pii taxi; int map[21][21]; int N, M, fuel; int dx[4] = { 0,0,1,-1 }..

[백준/BOJ] 19237 - 어른 상어 (c++)

1. 상어들이 움직인다 2. 겹친 상어상태에서 지울 상어를 지운다. 3. 냄새시간을 하나씩 다 센다 4. 새로운 냄새를 다시 만든다. 주의할 점은 딱히 머 없는거 같다. #include #include #define pii pair using namespace std; struct s { int x, y, d; bool alive; } shark[401]; int N, M, k, prior[401][5][4], rS, T; pii map[20][20]; //smell map int dx[5] = { 0,-1,1,0,0 }, dy[5] = { 0,0,0,-1,1 }; void Input() { cin >> N >> M >> k; rS = M, T = 0; int a; for (int i = 0; i < N..

[백준/BOJ] 18411 - 試験 (c++)

1. 문제 www.acmicpc.net/problem/18411 18411번: 試験 JOI 君は情報の試験を 3 回受けた.試験の点数はすべて 0 以上 100 以下の整数である. JOI 君の成績は 3 回の試験の点数のうち高い方から 2 つを足し合わせた合計によって決まる. 3 回 www.acmicpc.net 문제가 JOI 君は情報の試験を 3 回受けた.試験の点数はすべて 0 以上 100 以下の整数である. JOI 君の成績は 3 回の試験の点数のうち高い方から 2 つを足し合わせた合計によって決まる. 3 回の試験の点数 A, B, C が与えられたとき,3 回の試験の点数のうち高い方から 2 つを足し合わせた合計を出力するプログラムを作成せよ. 이거인데 번역기를 돌려보니 JOI 군은 정보의 시험을 3 번 받았다. 시험 점수는 모두 0 이상 100..

[백준/BOJ] 2740 - 행렬 곱셈 (c++)

1. 문제 www.acmicpc.net/problem/2740 2. 풀이 위의 식처럼 행렬 곱셈을 원소 하나하나씩 푸는 것이다. 3. 소스코드 #include int m1[102][102], m2[102][102], res[102][102] = { 0 }; int main() { int n, m, k; scanf("%d %d", &n, &m); for (int i = 0;i < n;i++) { for (int j = 0;j < m;j++) { scanf("%d", &m1[i][j]); } } scanf("%d %d", &m, &k); for (int i = 0;i < m;i++) { for (int j = 0;j < k;j++) { scanf("%d", &m2[i][j]); } } for (int i =..

[백준/BOJ] 1629 - 곱셈 (c++) (분할정복)

1. 문제 www.acmicpc.net/problem/1629 2. 풀이 A의 B승은 A의 B/2승의 제곱과 같다. 위와 같이 지수가 짝수일 경우 단지 지수를 반으로 쪼개기만 하면 되었지만 아래의 수식과 같이 지수가 홀수일 경우 반으로 쪼개는 것과 동시에 밑을 하나 더 곱해주면 된다. 3. 소스코드 #include typedef long long ll; int a, b, c; ll power(long long n, long long m) { if (m == 0) return 1; ll res = power(n, m / 2) * power(n, m / 2) % c; if (m % 2) return res * n % c; return res; } int main() { scanf("%d %d %d", &a,..