728x90
https://www.acmicpc.net/problem/2816
처음에 이 문제를 풀 땐 아니 뭐 이렇게 조건이 없냐.. 이러면 다 다르게 답이 나오잖아 어쩔 거야! 했는데
다른 사람들의 코드를 보다가 스페셜 저지 문제가 원래 여러 답이 나오는 문제라는걸 알게 되었다..ㅋ..
다른 사람의 코드를 보면 이게 문제다. 그 방법 말곤 다른 방법으로 풀지 못하게 된다는...
후.. 아쉽지만 여러 생각을 해봐도 이 방법이 젤 쉽고 간단한 거 같기에 나도 이렇게 풀었다.
1을 가장 첫 번째 화살표 위치로 정하고 KBS1이 나올 때까지 쭉 내리고(1) 맨 위로 올려 보내기(4)
다음으로 KBS2가 나올 때까지 쭉 내리고(1) 맨 위 바로 아래까지 올려 보내기(4)
다음 스페셜 저지 문제부터는 당황하지 말고 혼자 풀어봐야겠다..
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
string arr[101];
int kbs1 = 0;
int kbs2 = 0;
cin >> n;
for(int i=1; i<=n; i++) {
cin >> arr[i];
if(arr[i] == "KBS1") kbs1 = i; //4
if(arr[i] == "KBS2") kbs2 = i; //3
}
int b = kbs1 - 1; //맨 위에서 kbs1까지 내려가는데 드는 횟수
for(int i=1; i<=b; i++) cout << 1;
for(int i=1; i<=b; i++) cout << 4; //KBS1 맨 위로 올리기
//KBS2가 KBS1보다 아래였다면, 위 코드로 인해서 더 위로 올라감. 그러므로 kbs2의 인덱스에 +1 해줘야 한다. 한 문자열이 더 추가되었으므로
if(kbs1 > kbs2) kbs2++;
//맨 위에서 kbs2까지 내려가는데 드는 횟수
b = kbs2 - 1;
for(int i=1; i<=b; i++) cout << 1;
for(int i=1; i<b; i++) cout << 4; //KBS2 맨 위 바로 "아래"까지 올리기
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 10026번: 적록색약 (0) | 2022.07.24 |
---|---|
[백준/c++] 2583번: 영역 구하기 (0) | 2022.07.23 |
[백준/c++] 8979번: 올림픽 (0) | 2022.07.23 |
[백준/c++] 2621번: 카드게임 (0) | 2022.07.23 |
[백준/c++] 1652번: 누울 자리를 찾아라 (0) | 2022.07.23 |