[boj] 2840 행운의 바퀴
Problem Solving
2020. 12. 5. 23:26
반응형
2840번: 행운의 바퀴
첫째 줄에 마지막 회전에서 화살표가 가리키는 문자부터 시계방향으로 바퀴에 적어놓은 알파벳을 출력한다. 이때, 어떤 글자인지 결정하지 못하는 칸은 '?'를 출력한다. 만약, 상덕이가 적어놓
www.acmicpc.net
#include <iostream>
#include <deque>
using namespace std;
deque<char> dq;
int n;
int roll;
char val;
int step;
int visited[100]; // ascii 기준의 visited 배열 생성;
int main(void)
{
cin >> n >> roll;
for (int i = 0; i < n; i++)
dq.push_back('?');
for (int i = 0; i < roll; i++)
{
cin >> step >> val;
while (step-- > 0) // 빼내어 넣기
{
dq.push_back(dq.front());
dq.pop_front();
}
if (dq.front() != '?' && dq.front() != val) // 값이 들어간 같은 위치에 다른 값
{
cout << "!" << endl;
return (0);
}
else if (dq.front() == '?' && visited[val]) // 다른 위치(빈 공간)에 중복
{
cout << "!" << endl;
return (0);
}
else
if (dq.front() == '?') // 빈 공간(물음표)에 값 넣기
{
dq.pop_front();
dq.push_front(val);
visited[val]++;
}
}
cout << dq.front();
dq.pop_front();
while (!dq.empty()) // 출력
{
cout << dq.back();
dq.pop_back();
}
cout << endl;
return (0);
}
Main.cc: In function ‘int main()’:
Main.cc:31:41: warning: array subscript has type ‘char’ [-Wchar-subscripts]
31 | else if (dq.front() == '?' && visited[val])
| ^~~
Main.cc:41:12: warning: array subscript has type ‘char’ [-Wchar-subscripts]
41 | visited[val]++;
| ^~~
문제 자체는 그렇게 어려운 편이 아닌데, 예외 처리 시 출력사항을 이해하지 못해서 시간을 좀 허비한 케이스
> 만약, 상덕이가 적어놓은 종이에 해당하는 행운의 바퀴가 없다면 "!"를 출력한다.
>> 오류 발생시 '!'이외 그 아무것도 출력하지 말아야한다는 의미였는데,
>> 바퀴의 한 칸에 느낌표라고 새겨놔야하는 줄 알고 시간 낭비만 했다.
보통 알파벳 ascii 값에 대해서 [alpha - 'A'] 이런 식으로 인덱스에 접근하던데,
어차피 알파벳 용으로만 쓰는 거면 배열 100을 주고 그냥 인덱스에 바로 알파벳을 받아버려도 무방하지 않나 생각된다.
(대문자 A는 65, 대문자 Z는 90이다. 소문자가 주어지더라도 배열 128개를 주면 기본 아스키는 넉넉하게 받을 수 있으니 대응도 간단)
반응형
'Problem Solving' 카테고리의 다른 글
[boj] 2164 카드2 (0) | 2020.12.07 |
---|---|
[boj] 3986 좋은 단어 (0) | 2020.12.07 |
[boj] 1021 회전하는 큐 (0) | 2020.12.04 |
[boj] 9012 괄호 (0) | 2020.12.02 |
[boj] 1158 요세푸스 문제 (0) | 2020.12.01 |