inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

7-O

7-O 질문입니다.

424

yeon _leaf

작성한 질문수 22

0

안녕하세요 선생님!

http://boj.kr/3c22c999557b40eb917d73182dcd2cc0

위의 코드는 통과한 코드인데 통과 후 선생님 코드와 비교해보면서 보다가 궁금한 점이 생겨 질문드립니다.

제 코드의 82 ~ 85번째 줄에서

if (nx == cx && ny == cy && chess[nx][ny] == 1) {
	ka[i].d = nd;
	continue;
}

이 부분을 넣은 이유는 아래의 경우 때문입니다.

4 3
0 0 0 0
0 2 1 2
0 0 0 0
0 0 0 0
2 3 2
1 3 3
3 3 3

이렇게 파랑 - 빨강 - 파랑 순으로 놓여있을 때

첫 번째 턴에서 (2, 3) 자리에 0 1 2 번째 말이 있게 되고 0번째 말의 방향이 변경됩니다.

그리고 다음 턴에서 0번째 말이 움직일 때 움직일 칸이 파란색 칸이기 때문에 현재 칸이 빨간색이더라도 말의 순서가 뒤집히면 안 됩니다.

82 ~ 85번째 줄을 넣지 않으면 이때 말의 순서가 뒤집혀서 2 1 0 순이 되는 문제점이 있었습니다.

선생님 코드에서는 이 부분을 직접적으로 예외처리 하지 않는 듯한데 어떻게 저 케이스에서 정상적으로 작동하는지 궁금합니다.

저거 찾느라 몇 시간을 쓰다 보니 저런 예외처리를 따로 안 해도 되는 방법이 있다면 좋을 것 같아서 질문드립니다.

코테 준비 같이 해요! C++

답변 2

1

큰돌

음.. 예외처리라는 말이 좀 이해가 안가는데요. 이 문제에서 yeon님이 말씀하신 케이스(파빨파)가 예외가 된다고 말씀하시는건가요?

그러면 파란색 경우 > 빨간색 경우 > 파란색 경우를 다음의 지문에 따라 처리하면 되지 않나요? 굳이 그 케이스를 따로 뺄 이유가 있으실까요?

  • 빨간색인 경우에는 이동한 후에 A번 말과 그 위에 있는 모든 말의 쌓여있는 순서를 반대로 바꾼다.

    • A, B, C가 이동하고, 이동하려는 칸에 말이 없는 경우에는 C, B, A가 된다.

    • A, D, F, G가 이동하고, 이동하려는 칸에 말이 E, C, B로 있는 경우에는 E, C, B, G, F, D, A가 된다.

  • 파란색인 경우에는 A번 말의 이동 방향을 반대로 하고 한 칸 이동한다. 방향을 반대로 바꾼 후에 이동하려는 칸이 파란색인 경우에는 이동하지 않고 가만히 있는다.

0

yeon _leaf

사실 82~85줄 코드가 없어도 파-빨-파 케이스에서 이동 후에

if (nx < 1 || ny < 1 || nx > n || ny > n || chess[nx][ny] == 2) {
	ka[i].d = nd;
	continue;
} 

여기 continue문에 걸려서 방향만 바꾸고 다음 말로 넘어가야 한다고 생각합니다. 그런데 저기서 걸리지 않고 계속 진행이 되는 이유를 모르겠어서 그 케이스를 예외처리로 빼 버렸습니다.

1-E질문입니다!

0

518

2

3-L 틀린 부분 피드백 부탁드립니다.

0

822

2

1-A문제 순열재귀함수 질문입니다.

0

385

1

1-A 일곱난쟁이문제입니다

0

457

1

문제 풀 때 방향성에 대해

0

801

1

맥에서 vs code로 실행 관련 질문입니다

0

523

1

17071번 메모리 초과

0

386

1

1-C질문입니다!

0

423

2

2-B BFS 시간초과질문

0

630

2

1-O 13번 라인

0

442

1

6-J 놀이공원 문제 질문

0

381

1

구현관련 질문

0

484

1

강의 교안

0

320

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

545

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

536

1

1-K

0

473

2

3-G번 질문있습니다.

1

474

3

3-C 실행 시간 질문드립니다.

0

494

1

4-A 문제 풀이 질문있습니다.

0

590

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

435

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

334

1

3-O go 함수 질문 드립니다.

1

448

2

4-A 출력 질문

0

305

1

1주차 1-O 질문드립니다

0

259

1