PS/백준

[BOJ] 17837 새로운 게임 2 (C/C++)

uyt8989 2022. 4. 30. 23:48
 

17837번: 새로운 게임 2

재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하

www.acmicpc.net


역시나 삼성 기출문제였다. 삼성 문제는 일단 문제를 꼼꼼히 읽는 게 중요한 것 같다. 문제를 완벽히 이해하고 필요한 기능을 하나하나 구현하면 풀 수 있다.

 

이번 문제를 풀기 위해서 가장 고민했던 부분은 게임의 진행 상태를 어떤 자료구조에 담을까였다. 제일 처음엔 링크드 리스트로 할까했는데 Singly 하게 구현해서는 안 됐고 Doubly까지 구현해야 했다. STL의 리스트가 Doubly로 구현되어 있다고 알아서 그걸 사용할까 생각했다. 그런데 최대로 필요한 경우가 4개 정도인데 Doubly까지는 필요 없다고 생각했다. 그다음엔 벡터. 그런데 벡터는 중간 삭제가 배열에 비해서 귀찮다고 생각했기 때문에 결국엔 돌고 돌아 배열을 사용했다. 내가 아마 배열보다 벡터를 더 잘 사용했다면 벡터를 사용했을 것 같긴 하다.

 

배열을 써야겠다고 생각한 이후부터는 문제가 그렇게 어렵다고 느껴지지 않았다. 예전에 풀었던 상어 시리즈가 더 괴로웠다. 대신에 배열을 쉽게 사용하기 위해서 현재 좌표에 몇 개의 말이 있는지 저장하는 2차원 배열과 말의 현재 좌표를 저장하는 1차원 배열을 추가로 사용했기 때문에 integrity를 신경 써서 코딩했다.

 

분명히 다 풀었다고 생각했는데 놓친 포인트가 있었다. 이동할 좌표로 이동이 불가능한 경우엔 우선 방향을 냅다 바꾸고 나서 반대 좌표가 이동이 가능하다면 이동하고 불가능하다면 그냥 가만히 있어야 했다. 제일 처음에 내가 했던 방법은 방향을 바꾸고 나서도 이동이 불가능하면 그냥 방향을 유지했었다. 그랬더니 6%에서 많은 틀렸습니다를 봤어야 했다. 이래서 문제 이해가 중요하다. 그래도 이것만 수정하니까 바로 맞았다.

 

처음엔 이동을 다 마친 이후에 종료 판정을 내릴려고 했었는데 의외로 0.5초로 제약 시간이 엄청 타이트해서 중간에 방법을 바꿨다.

 

 

후기)

오늘 오픽을 봤다. 말 자체는 많이 한 것 같은데 대부분 아까 했던 말 반복 + 잘못 말한 거 주워 담기라서 성적이 어떻게 나올지 모르겠다. 허허

'PS > 백준' 카테고리의 다른 글

[BOJ] 1715 카드 정렬하기  (0) 2022.09.27
[BOJ] 2448 별 찍기 - 11 (C/C++)  (0) 2022.09.04
[BOJ] 19238 스타트 택시 (C/C++)  (2) 2022.04.27
[BOJ] 15685 드래곤 커브 (C/C++)  (0) 2022.04.26
[BOJ] 19237 어른 상어 (C/C++)  (0) 2022.04.26