코딩 해줘야 할 것이 많지만 , 그리 어려운 문제는 아니었다.
다만 구현하는데 시간이 좀 걸렸다. 이런 문제는 시간 싸움인 것 같다.
문제에 대해서 간략히 정리하자면
19 * 19 배열을 오목판으로 생각하고 흰돌, 검은돌이 배열 위에 그려지게 되는데
지금 상황에서 흰돌이 이긴 것인지, 검은 돌이 이긴 것인지 판별한다. 알 수 없으면 0을 출력한다.
오목은 반드시 돌 5개가 나란히 놓여야지 이기는 것, 6개가 놓이면 이기는 것이 아니다.
만약 돌 5개가 놓인 지점의 가장 끝 부분(좌우 라면 가장 좌, 상하라면 가장 상)의 좌표도 출력하라.
문제에 나온 조건 대로 코딩해줬다.
코드는 100줄을 넘어가게 되었지만 나름대로 줄인다고 줄여봤는데 문제의 조건을 표현하는데만해도 꽤 많은 코드가
필요하므로 당연한 것 같다.
문제를 푸는데는 약 1시간 넘게 걸린 것 같다.
중요한 조건이라고 생각되는 것은 오목에서 이기기 위해서는 반드시 돌 5개가 연결되어야만 한다는 것이다.
그래서 반드시 5개만 연결된 것만 답이라고 생각하고 구현했다. 5개 이상은 아니다!
처음부터 끝까지 접근방법은
어느 한 돌을 만나면
돌을 색깔을 인자로 가지는 재귀 호출을 하는 것이었다.
방향은
1) 좌우, 2) 상하, 3) 좌상우하 , 4)좌하우상
이렇게 크게 4가지의 단위로 검색을 하면 된다.
그래서 맞으면 값을 도출하고, 재귀호출시에 가장 최소 좌표를 찾아놓으므로 맞춰서 같이 출력해주면 답이 나왔다.
하지만 더블릿에서 다른 사람의 맞춘 소스를 보고 느낀 것은 내 코드에 쓸데없는 조건들이 좀 많이 들어간 거 같다. ㅜㅜ
담백한 코드를 짜고 싶었는데,,
'알고리즘문제풀이' 카테고리의 다른 글
더블릿_좌우대칭산모양 (0) | 2015.04.18 |
---|---|
더블릿_ISBN (0) | 2015.04.18 |
더블릿_골드바하의 추측 (0) | 2015.04.17 |
더블릿_색종이 올려놓기 (0) | 2015.04.17 |
더블릿_dna결합 (0) | 2015.04.15 |