반응형
C++ 문제 풀 때 string 다루는게 제일 어려운 것 같다.
string, char 변환에 너무 어려움을 여전히 겪는다.
자바 쓸땐 정말 쉬웠는데 ㅜㅜ
복잡하고 귀찮다고 생각하면 확실히 더 못 풀게 되는 것 같다.
그리고 생각나는 풀이가 깔끔하지 못하다고 생각되더라도, 나름의 확신으로 자신감을 갖고 코딩하는 것도 필요한 것 같다.
그러다 보면 코딩하면서 스스로 더 정리되는 것도 있는 것 같다.
#include <iostream>
using namespace std;
string King, Stone;
int N;
int main() {
string mv; // 움직이는 입력값
int m1, m2; // 움직이는 입력값 => 좌표로 변환
cin >> King >> Stone >> N;
while(N--) {
cin >> mv;
m1 = m2 = 0;
if(mv.find("R") != -1)
m1 = 1;
if(mv.find("L") != -1)
m1 = -1;
if(mv.find("B") != -1)
m2 = -1;
if(mv.find("T") != -1)
m2 = 1;
// 킹이 움직이는 것 시뮬레이션
string nKing = "";
nKing += (char)(King[0] + m1);
nKing += (char)(King[1] + m2);
if(nKing[0] < 'A' || nKing[0] > 'H' || nKing[1] < '1' || nKing[1] > '8') // 벗어남
continue; // 벗어나면 입력 무시하고 다음 입력
if(nKing == Stone) { // 가려는 곳에 돌이 있다면
// 돌이 움직이는 것 시뮬레이션
string nStone = "";
nStone += (char)(Stone[0] + m1);
nStone += (char)(Stone[1] + m2);
// 돌이 같이 움직이는데 맵을 벗어남
if(nStone[0] < 'A' || nStone[0] > 'H' || nStone[1] < '1' || nStone[1] > '8') // 벗어남
continue;
else // 안벗어나면 돌 움직임
Stone = nStone;
}
King = nKing; // 여기까지 정상적으로 오면 킹 움직임.
}
cout << King << "\n" << Stone << "\n";
}
내 풀이의 장점 :
다른 분들의 풀이도 찾아보았는데, 나름 나도 깔끔하게 풀이한 것 같다.
방향성을 처리할 때, 상하좌우에 대한 이동 좌표값만 체크해주면 대각선은 알아서 처리할 수 있다.
내 풀이의 단점 :
나는 위치를 문자열로 담아서 연산했는데,
각각의 포지션을 int 형태의 pair로 변환시켜서 계산하신 분도 계셨다. 그렇게 하면 조금 더 깔끔할 수 있을 것 같다.
소요 시간 : 40분
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 1986번 체스 (0) | 2022.07.08 |
---|---|
[BaekJoon/백준] 2468번 안전 영역 (0) | 2022.07.07 |
[BaekJoon/백준] 2784번 가로 세로 퍼즐 (0) | 2022.07.06 |
[BaekJoon/백준] 3085번 사탕 게임 (0) | 2022.07.05 |
[BaekJoon/백준] 2309번 일곱 난쟁이 (0) | 2022.07.05 |