[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (35일차)
[4코1파] 2023.01.13~ (26일차)

Today :

2023.02.07 [35일차]

프로그래머스 LV2
카펫
https://school.programmers.co.kr/learn/courses/30/lessons/42842

문제 설명

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

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

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

제한사항

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

입출력 예

※ 공지 - 2020년 2월 3일 테스트케이스가 추가되었습니다.
※ 공지 - 2020년 5월 11일 웹접근성을 고려하여 빨간색을 노란색으로 수정하였습니다.

문제 풀이 방법

일단, yellow랑 brown 사이의 규칙을 찾기 위해서 두뇌풀가동 (x) 손풀가동(x)

찾을 때 까지 냅다그려봄 (그래봤자 6개 그리고 힘들어)

1시간 고민했지만 깨달은 것
하지만 나는 규칙을 찾지 못했다..
나는 순식간에 감이 왔다.. 이건 내가 답을 보지 않고서야.. 영영 못푸는 뭔가 있을 거라고 그래서 찾아봄

  • (yellow의 가로2) + (yellow의 세로2) +4 = 갈색 겨자수가 같으면 된다는 공식 발견..
  • 쉽게 가로의 길이는 주어진 yellow의 에서 2를 더하면 된다는 것을 파악할 수는 있다.
    그러나,, 저 +4 해괴망측한건.. 어디서 오는건지.. 생각해봤는데
    위의 그림에서 보다시피 가로 길이 +2, 세로 길이 +2 를 하고 남은 yellow를 감싸앉는 나머지 갈색 겨자수는 기가막히게 대각에 남는 4개가 된다.. 이런거 였군..
    (이해 완)

내 코드

def solution(brown, yellow):
    answer = []
    yellow_w, yellow_h = 0,0
    
    for i in range(1, yellow+1):
        if yellow%i==0:
            yellow_w  = int(yellow/i)
            yellow_h = i
            
            if (yellow_w*2) + (yellow_h*2) +4 == brown:
                answer.append(yellow_w+2)
                answer.append(yellow_h+2)
                break
                
    sorted(answer, reverse=True)
    return answer

증빙

다른 사람 풀이

yellow의 가로길이2 + yellow의 세로길이2 +4 = brown 개수 알아낸 사람 ㄳ

여담

출제자의 의도 : 완전탐색
내가 시도한거 :

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글