Algorithm

[백준] 14500번 : 테트로미노 (Java)

남 희 2022. 4. 7. 00:29
 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변

www.acmicpc.net

 

📚 문제 한 줄 요약

주어진 테트로미노(4칸의 연속으로 이어진 도형) 모양으로 계산한 수의 합의 최댓값 구하기

 

📚 문제 포인트 : 어떻게 주어진 테트로미노 모양으로 계산한 수의 합을 전부 탐색해볼 수 있을까?

 

📚 풀이

위 질문에 대해 나는 완전 탐색으로 풀기로 결정했다.

주어진 도형은 총 5가지로, 회전, 대칭한 모양으로 탐색할 수도 있다.

회전 대칭까지 고려하면 고려해야 하는 모양은 아래와 같고, 총 19가지이다.

테트로미노로 수의 합을 탐색해야 하는 경우의 수

이 경우의 수를 모두 탐색할 때 실행 횟수를 계산해보니,

(배열의 최대 크기) x (테트로미노 모양으로 합 구하기) x (테트로미노 경우의 수)

= (500 * 500) * 4 * 19

2*10^7번이었고 완전 탐색으로 풀어도 시간 초과가 나지 않을 것이라 판단했다.

제한 시간이 2초 Java언어인데 10^8회를 넘지 않기 때문이다.

 

위와 같은 아이디어로 푼 코드는 아래 링크에서 볼 수 있다.

 

GitHub - nhee0410/Coding-Test-Study: 코딩 테스트 문제 풀이 및 업로드

코딩 테스트 문제 풀이 및 업로드. Contribute to nhee0410/Coding-Test-Study development by creating an account on GitHub.

github.com

 

📚 느낀 점

1. 시간제한을 걸고 문제를 풀어서 맞추는 것에만 집중했더니 효율은 전혀 고려하지 못한 부분이 많고 때문에 코드가 너무 길어졌다. 같은 완전 탐색이라도 여기서 중복되는 코드는 줄여서 좀 더 간결하고 효율적인 코드를 짤 수 있을 것 같다.

2. 4칸인 정사각형이 변끼리 연결(상하좌우)이라는 정보에서 그래프 탐색으로 풀 수도 있겠다는 힌트를 얻을 수 있었고, 완전 탐색 외에 그래프 탐색으로도 도전해 봐야겠다.

'Algorithm' 카테고리의 다른 글

[백준] 1476번 : 날짜 계산(C++)  (0) 2021.12.31
[백준] 10845번 : 큐 (C++)  (0) 2021.12.03
[백준] 2309번 : 일곱 난쟁이 (C++)  (0) 2021.11.28
[백준] 1978번 : 소수 찾기 (C++)  (0) 2021.11.27
[백준] 4375번 : 1 (C++)  (0) 2021.11.25