티스토리 뷰

[문제 링크]

https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제 고민]

  • 1차 시도: 둘레로 접근해볼까? →  장렬히 실패
  • 2차 시도: yellow 약수 조합에 따라 가로, 세로 길이는 무조건 yellow 카펫 + 2여야한다는 사실 발견. 다만, 세로의 경우 가로에 따라 영향 받음. (ex) brown: 8 , yellow: 1 → yellow 카펫이 1개이므로 brown 카펫은 "최소" 좌/우, 위/아래 총 4개 필요함. 따라서, 가로는 1+2 = 3 / 세로는 1+2 =3이다. (아래 그림 참고)
  • 3차 시도: 넓이로 접근해봄. 위의 논리에 따라 yellow 카펫이 1개일 때 가능한 조합은 가로 3 , 세로 3 뿐이다. brown 개수의 경우 넓이(3*3) - yellow 카펫 개수 (1개) = 8개로 구할 수 있다는 점에서 이걸 조건으로 코드 구현.

좌/우, 위/아래가 필요한 이유..?

[핵심 개념]

  1. 약수 조합 및 넓이의 관계..? 

 

[추가 끄적]

  1. 둘레로 시도한다면 더 짧은 코드로 구현이 가능한 것 같다. 이 부분 확인이 필요하다.

 

[작성 코드]

def solution(brown, yellow):
    x= 0
    y= 0
    answer = []
    for i in range(1, yellow+1):
        if yellow % i == 0:
            x = (yellow // i)+2
            y = i+2
            if (x * y) - yellow == brown:
                answer.append(x)
                answer.append(y)
                break
    return answer
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함