문제
상덕이는 최근에 행운의 바퀴를 구매했다. 상덕이는 바퀴의 각 칸에 알파벳 대문자를 아래 그림과 같이 적었다.
바퀴에 같은 글자는 두 번 이상 등장하지 않는다. 또, 바퀴는 시계방향으로만 돌아간다. 바퀴 옆에는 화살표가 있는데, 이 화살표는 항상 한 곳을 가리키고 있으며, 돌아가는 동안 가리키는 글자는 바뀌게 된다. 위의 그림에서는 H를 가리키고 있다.
상덕이는 바퀴를 연속해서 K번 돌릴 것이다. 매번 바퀴를 돌릴 때 마다, 상덕이는 화살표가 가리키는 글자가 변하는 횟수와 어떤 글자에서 회전을 멈추었는지를 종이에 적는다.
희원이는 상덕이가 적어놓은 종이를 발견했다. 그 종이를 바탕으로 상덕이가 바퀴에 적은 알파벳을 알아내려고 한다.
상덕이가 종이에 적어놓은 내용과 바퀴의 칸의 수가 주어졌을 때, 바퀴에 적어놓은 알파벳을 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 바퀴의 칸의 수 N과 상덕이가 바퀴를 돌리는 횟수 K가 주어진다. (2 ≤ N ≤ 25, 1 ≤ K ≤ 100)
다음 줄부터 K줄에는 바퀴를 회전시켰을 때 화살표가 가리키는 글자가 몇 번 바뀌었는지를 나타내는 S와 회전을 멈추었을 때 가리키던 글자가 주어진다. (1 ≤ S ≤ 100)
출력
첫째 줄에 마지막 회전에서 화살표가 가리키는 문자부터 시계방향으로 바퀴에 적어놓은 알파벳을 출력한다. 이때, 어떤 글자인지 결정하지 못하는 칸은 '?'를 출력한다. 만약, 상덕이가 적어놓은 종이에 해당하는 행운의 바퀴가 없다면 "!"를 출력한다.
예외처리 .
1. 같은 알파벳이 다른위치에서 또 나오는 경우
2. 자신의 위치에 물음표또는 현재 알파벳이 아닌 다른 알파벳이 있는 경우
4번을 돌려서 4번다 원점이 나올 수 있으므로 계속 4 A가 나오는 것은 허용
그러나 4 A 4 B는 불허.
또한 4 A 4 A 4 A는 계속 같은 지점에서의 같은 알파벳이므로 허용이지만
1 A 1 A는 다른 위치에 다른 알파벳이므로 불허.
#include<iostream>
using namespace std;
char arr[25];
int alpa[26];
int main(void)
{
int N,K;
cin >> N >> K;
for(int i = 0 ; i < N; i++)
{
arr[i] = '?';
}
int index = 0;
for(int i = 0; i < K; i++)
{
int S;
char A;
cin >> S >> A;
if(S < N)
{
index -= S;
if(index < 0)
{
index += N;
}
if(arr[index] == '?')
{
arr[index] = A;
if(alpa[A-'A'])
{
if(alpa[A-'A'] != index+1)
{
cout << "!" <<endl;
return 0;
}
}
alpa[A-'A'] = index+1;
}
else
{
if(arr[index] != A)
{
cout << "!" <<endl;
return 0;
}
}
}
else
{
while(S >= N)
{
S -= N;
}
index -= S;
if(index < 0)
{
index += N;
}
if(arr[index] == '?')
{
arr[index] = A;
if(alpa[A-'A'])
{
if(alpa[A-'A'] != index+1)
{
cout << "!" <<endl;
return 0;
}
}
alpa[A-'A'] = index+1;
}
else
{
if(arr[index] != A)
{
cout << "!" <<endl;
return 0;
}
}
}
}
for(int i = 0 ; i < N; i++)
{
if(index >= N)
{
index -= N;
}
cout << arr[index] ;
index++;
}
}
'Algorithm' 카테고리의 다른 글
백준 17142번 연구소3 (삼성 기출) (0) | 2020.02.01 |
---|---|
백준 14890번 경사로 (삼성 기출) (0) | 2020.01.29 |
백준 16234번 인구 이동 (삼성 기출) (0) | 2020.01.27 |
백준 15686번 치킨 배달 (삼성 기출) (0) | 2020.01.25 |
백준 14889번 스타트와 링크 (삼성 기출) (0) | 2020.01.24 |