1. 생각 도출
// 조건
// 가로는 세로와 같거나 세로보다 더 길다
// 생각
// yellow의 약수를 구해서 약수 짝끼리 yellow 모양이라고 가정하고 가로, 세로, brwon을 구해본다
// yellow의 약수를 모두 구해서 약수 짝끼리 살펴 봐야 하니 완전탐색이 아닐까
// yellow보다 작은 수를 돌면서 약수를 구한다
// 약수가 1이다
// 가로 = yellow + 2, 세로 = 3
// 해당 가로세로의 넓이에서 yellow를 뺀 후 brown을 구한다
// 구한 brown이 주어진 brown과 같으면
// 더 긴 걸 가로로 하고 작은 걸 세로로 한 후 종료한다
// 약수가 1이 아니다
// 첫 번째 약수 + 2, 두 번째 약수 + 2 중 더 긴 것이 가로, 짧은 것이 세로
// 해당 가로세로 넓이에서 yellow를 뺀 후 brown을 구한다
// 구한 brown이 주어진 brown과 같으면
// 더 긴 걸 가로로 하고 작은 걸 세로로 한 후 종료한다
-------
// 가로가 더 길거나 같다
// 생각
// yellow를 어떻게 배치하냐에 따라 brown의 개수가 달라진다
// 주어진 yellow를 배치할 수 있는 각 방법에 따라 brown 개수를 구한 후 주어진 거라 비교해본다
// 구현
// yellow를 돌면서 yellow의 약수를 구한다
// 약수와 약수로 나눈 수 중 큰 수를 가로로 놓고, 작은 수를 세로로 놓는다
// 해당 가로와 세로에 따른 brown의 개수를 구한다
// 가로*2 + 세로 *2 + 4
// 위에서 구한 거와 주어진 brown을 비교해서 같으면
// 가로 = 위에서 구한 yellow 가로 + 2, 세로 = 위에서 구한 yellow 세로 + 2
2. 회고
- 맨 처음에는 이게 왜 완전탐색이지? 어리둥절 했는데 좀만 그리면서 생각해보니까 yellow의 가로 세로는 yellow의 약수짝끼리 형성되고, 이렇게 형성된 yellow 모양에 따라 brown의 개수, 가로, 세로가 결정된다. 그러니 이 문제는 yellow의 약수를 완전 탐색하면서 살펴봐서 brown을 구하고 해당 brown이 주어진 brown에 맞는 경우의 가로 세로를 리턴하면 되는 것이다.
- 떠오른 것을 직관적으로 코드로 구현하느라 코드가 좀 길어졌는데 약간의 수정을 거치면 코드를 더 줄일 수 있을 것 같다.
- 그래도 혼자 풀어내서 뿌듯하다...
-----
- 몇 케이스 직접 그려보니 yellow 모양에 따라 brown의 개수가 달라짐을 확인할 수 있었고, yellow의 모양은 yellow의 약수로 구분할 수 있음을 깨달을 수 있었음. 그래서 yellow의 약수를 완전탐색하면서 brown의 개수를 구하고 주어진 brown과 비교하는 과정을 거침
- 이제는 쉽게 느껴진다
3. 체크
풀이 횟수 | 시간 | 정답 여부 | 참고 여부 |
2 | 50분 | O | |
3 | 20분 | O |
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기_86971 (0) | 2023.07.18 |
---|---|
[프로그래머스/자바] 피로도_87946 (0) | 2023.07.17 |
[프로그래머스] 소수찾기_42839 (0) | 2023.07.14 |
[프로그래머스/자바] 구명보트_42885 (0) | 2023.07.13 |
[프로그래머스] 큰 수 만들기_42883 (0) | 2023.07.12 |