본문 바로가기

Python ◡̈/차근차근 Python

[programmers] python 완전탐색 카펫

 

programmers.co.kr/learn/courses/30/lessons/42842?language=python3

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

 

 

< problem >

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.

Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 


< constraint >

- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.

 



< example >

 


 

< 풀이 방법 >

- for문 : 3 ~ sqrt(brown+yellow) 반복

    - if yellow가 하나 존재한다면, 최소 3행 3열이기 때문에 반복문은 3부터 시작

    - 반복 횟수 줄이기 위해 for 문 반복 시 brown+yellow 의 제곱근까지만 반복

        - 가로 길이가 세로보다 길거나 같은 것을 확인했기 때문에 가능

        - 제곱근 계산 위해 import math

 

    - if 반복문의 i가 brown+yellow를 나누었을 때, 나머지가 없다면 더 긴 것이 가로 a, 나머지는 세로 b 변수에 값 저장

    - answer 배열에 가로와 세로 값 차례로 append

 

- answer 배열 출력

 


 

실패 코드: 세번째 테스트케이스에서 결과 값이 다르게 나옴

    - 첫번째로 나온 값이 답이 아닌 경우 이러한 결과 나올 것을 예상하지 못해, 여러 경우의 수가 나올 경우 고려 필요

 


 

** 코드 수정 ( 여러 경우의 수가 존재하는 경우, 어떤 것이 답일지 생각해보기 )

- yellow는 항상 중앙에 위치하기 때문에 가로-2 * 세로-2 계산 시 yellow 값과 같다면 해당 배열 추가

 

성공 코드

 

 

** comment: append 할 필요 없이 return [a, b] 해도 결과값 같음

** 테스트 결과는 동일


 

< 완성 코드 >

 


 

-

-

한 가지는 생각하고, 그 다음 부분을 생각하지 못 한 부분이 아쉬웠다,,

여러 경우가 나올 수 있는 것도 생각해서 코드 짜기!

 


 

CODE REVIEW 통해 변수 선언으로 연산 줄이기, 변수 활용하여 다른 변수 줄여 바로 return 

 

ⓕ ⓘ ⓝ ⓐ ⓛ    ⓒ ⓞ ⓓ ⓔ