알고리즘/백준

[백준/c++] 2816번: 디지털 티비

녕이 2022. 7. 23. 16:51
728x90

 

https://www.acmicpc.net/problem/2816

 

2816번: 디지털 티비

2012년 12월 31일 새벽 4시부터 지상파 아날로그 TV방송이 종료되었다. TV를 자주보는 할머니를 위해서, 상근이네 집도 디지털 수신기를 구입했다. 원래 상근이네 집에는 KBS1과 KBS2만 나왔다. 할머니

www.acmicpc.net

 

 

처음에 이 문제를 풀 땐 아니 뭐 이렇게 조건이 없냐.. 이러면 다 다르게 답이 나오잖아 어쩔 거야! 했는데

다른 사람들의 코드를 보다가 스페셜 저지 문제가 원래 여러 답이 나오는 문제라는걸 알게 되었다..ㅋ..

다른 사람의 코드를 보면 이게 문제다. 그 방법 말곤 다른 방법으로 풀지 못하게 된다는...

후.. 아쉽지만 여러 생각을 해봐도 이 방법이 젤 쉽고 간단한 거 같기에 나도 이렇게 풀었다.

 

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