본문 바로가기

개발/알고리즘

[BOJ] 연구소_14502..

위 사진은 답안의 전체 소스 코드이다.

 

이 문제를 이해하는데 총 3일이 걸렸다...

3일 동안 이 문제를 본 것이 아니지만, 너무 이해가 안가서 딴짓하다 오기를 반복하며 시간을 많이 소비했다. (알고리즘 때려치고 싶었다...)

문제를 대충 이해하고 푼 지금에도 2주 뒤에 풀라고 한다면 못 풀 것 같다..

 

우선 가장 이해가 가지 않았던 부분.

 

1. 벽 세우기.

전체 벽을 세워야 하니까...  중첩 반복문으로 n*m중에 3개를 뽑는 경우의 수를 모두 고려해 줘야 한다.

지금도 헷갈리는게 build_wall가 모든 경우를 고려해 준 것이 맞는지 잘 모르겠다...

(이해하기 위해 그림으로 그린 후, 이해한 것을 기록하자.)

 

그리면서 대충은 이해한 것 같은데,, 아직 확신이 안든다.

이것만 잡고 있을 순 없으니 일단은 넘어가자.

 

 

이 문제에서 가장 이해가 가지 않았던 부분이 벽 세우는 것이였다.

어떤 분이 말하기를 자신은 알고리즘 6개월 만에 재귀가 뭔지 드디어 정확히 안 것 같다고 하던데,,,

그 만큼 보기와 다르게 이해하기 어려운 부분인 것 같다.

 

이 문제를 풀면서 깨닮은 점.

1. 제시된 조건을 잘 보자.

N<=8 M<=8 같은 주어진 조건을 그냥 보고 무시하곤 햇는데, 엄청난 힌트라는 것을 알게 되었다.

주어진 범위가 1만인 경우, 10000 * 10000 = 1억이 되므로 중첩 반복문을 사용했을 때 무조건 1초가 넘어가므로 최적화를 시켜야 한다.

 

하지만 위 문제와 같이 범위가 아주 작은 것들은, 중첩 반복문으로 접근하는 방식이 맞을 확률이 높을 것 같다.

지금 생각해보면 위 문제도 벽을 세울 때 재귀를 사용하는 방법을 생각해내는 것 말고는 그렇게 엄청 어려운 문제는 아닌 것 같다.

실제로 골드 5정도니,, 아직 갈 길이 먼 것 같다.

쏘마 꼭 합격하고 싶은데,, 끝까지 열심히 해보자.

'개발 > 알고리즘' 카테고리의 다른 글

백준 빙산 2573  (0) 2021.02.01
백준 16236 파이썬  (0) 2021.02.01
[BOJ] 잃어버린 괄호_1541  (0) 2021.01.27
[BOJ] 거스름돈_5585  (0) 2021.01.24
[BOJ] 나이트의 이동_7562  (0) 2021.01.22