프로그래밍/C++
2873 롤러코스터 [C++]
김파츠
2023. 8. 26. 20:57
https://www.acmicpc.net/problem/2873
2873번: 롤러코스터
첫째 줄에 가장 가장 큰 기쁨을 주는 롤러코스터는 가장 왼쪽 위 칸부터 가장 오른쪽 아래 칸으로 어떻게 움직이면 되는지를 출력한다. 위는 U, 오른쪽은 R, 왼쪽은 L, 아래는 D로 출력한다. 정답
www.acmicpc.net
#include <iostream>
#include <string>
#define MAX 1000
using namespace std;
int main(int argc, char** argv) {
int R, C;
int arr[MAX][MAX];
string str = "";
//제일 작은 기쁨을 가진 검은 칸
pair<int, int> MinHappyPos; //좌표
int MinHappyVal = MAX; //기쁨값
cin >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
//cout << "i: " << i << " j: " << j << '\n';
cin >> arr[i][j];
//현재 칸이 검은 칸이고 지금 기쁨값보다 작을 때
if (arr[i][j] < MinHappyVal && ((i+j)%2==1) ) {
//갱신해주기
MinHappyPos.first = j; //x
MinHappyPos.second = i; //y
MinHappyVal = arr[i][j]; //기쁨값
}
}
}
if (R % 2 == 1) {
//1) 세로가 홀수이고 가로가 짝수일 때
//횡방향(<-->)으로 이동
for (int i = 0; i < R; i++) {
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1) str += 'L';
else str += 'R';
}
if(i!=R-1) str += 'D';
}
}
else if (C % 2 == 1) {
//2) 세로가 짝수이고 가로가 홀수일 때
//종방향(↑↓)으로 이동
for (int i = 0; i < C; i++) {
for (int j = 0; j < R - 1; j++) {
if (i % 2 == 1) str += 'U';
else str += 'D';
}
if (i != C- 1) str += 'R';
}
}
else {
//3) 세로 가로 모두 짝수일 때
int MinR = (MinHappyPos.second % 2==0) ? MinHappyPos.second : MinHappyPos.second - 1;
int MinC = MinHappyPos.first;
//1. 검은칸이 있는 두 줄의 행까지 다다르기 전
//횡방향(<-->)으로 이동
for (int i = 0; i < MinR; i++) {
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1)str += 'L';
else str += 'R';
}
if (i != R - 1) str += 'D';
}
//2. 검은칸이 있는 두 줄의 행까지 다다른 후 (검은 칸 만나기 전)
for (int i = 0; i < MinC; i++) {
if (i % 2 == 1)str += "UR";
else str += "DR";
}
//3. 검은칸이 있는 두 줄의 행까지 다다른 후 (검은 칸 만난 후)
for (int i = MinC; i < C-1; i++) {
if (i % 2 == 1)str += "RU";
else str += "RD";
}
//4. 나머지 칸 (끝 점 까지)
for (int i = MinR + 2; i < R; i++) {
str += 'D';
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1)str += 'R';
else str += 'L';
}
}
}
cout << str;
}
참고자료
알고리즘(C++) / 백준 2873 : 롤러코스터
2873 www.acmicpc.net/problem/2873 2873번: 롤러코스터 첫째 줄에 가장 가장 큰 기쁨을 주는 롤러코스터는 가장 왼쪽 위 칸부터 가장 오른쪽 아래 칸으로 어떻게 움직이면 되는지를 출력한다. 위는 U, 오른
se-jung-h.tistory.com
https://www.slideshare.net/Baekjoon/baekjoon-online-judge-2873
Baekjoon Online Judge 2873번 풀이
choi@startlink.io https://www.acmicpc.net/problem/2873 • R * C • (1, 1) -‐> (R, C) • • https://www.acmicpc.net/problem/2873 • R C https:/...
www.slideshare.net