졍
지영이 블로그
졍
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • 네트워크 (12)
    • 시스템설계 (6)
    • AWS (7)
    • Elasticsearch (3)
    • Python (5)
    • 자료구조, 알고리즘 (9)
    • 코딩테스트 (29)
    • NCP (8)
    • 운영체제 (7)
    • 개인 프로젝트 (8)
    • Github (1)
    • 여행 (0)
      • 2024동유럽 (0)
    • 대학원 (0)
      • 논문정리 (0)

최근 글

최근 댓글

hELLO · Designed By 정상우.
졍

지영이 블로그

[Python] 프로그래머스 - 카펫
코딩테스트

[Python] 프로그래머스 - 카펫

2023. 8. 31. 17:57

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

 

프로그래머스

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

programmers.co.kr


문제를 보고 yellow의 약수를 나열해 문제를 풀면 되겠다고 생각했다.

곱해서 yellow 값이 나오는 약수 쌍을 구한 후, 각 쌍의 테두리 값을 구했을 때 brown과 값이 일치하는 쌍을 구하면 된다.

 

이때 약수 쌍을 (x, y)라고 하면, 테두리 값은 (x+1)*2 + (y+1)*2로 구할 수 있다.

return값은 카페트의 총 가로, 세로 길이를 돌려주므로 (x+2, y+2)를 반환하면 된다.

 

위 로직을 토대로 처음 짠 코드는 다음과 같다.

def solution(brown, yellow):
    answer = []

    nums = [(1, yellow)]
    for i in range(2, ((yellow)//2)+1):
        if yellow % i == 0:
            print(yellow//i, i)
            if i < yellow // i:
                nums.append((i, yellow // i))
          
    for x, y in nums:
        if (x+1)*2 + (y+1)*2 == brown and y >= x:
            answer = [y+2, x+2]

    return answer

예제 3개는 다 맞는데, 코드를 제출하면 히든케이스 1, 2, 3번에 대해 오답이 뜬다 ㅜㅜ

엣지 케이스를 고민하다가 코드 자체에 예외사항을 최대한 주지 않고 일반화 해야겠다고 생각했다.

(현재 코드는 [(1, yellow)]값을 먼저 가지고 시작하고, yellow//2 까지만 약수 쌍을 구하고 있기 때문이다)

 

일반화한 코드는 다음과 같다.

def solution(brown, yellow):
    answer = []
    
    nums = []
    for i in range(1, (yellow+1)):
        if yellow % i == 0:
            if i <= yellow // i:
                nums.append((i, yellow//i))
            else:
                break

	for x, y in nums:
        if (x+1)*2 + (y+1)*2 == brown and y >= x:
            answer = [y+2, x+2]

    return answer

예외사항을 없애는 대신 약수 쌍의 값이 뒤집어지는 순간 (중복 값이므로) for문을 break하는 조건을 추가해주었다.

'코딩테스트' 카테고리의 다른 글

[Python] 프로그래머스 - 입국심사  (0) 2023.10.18
[Python] 프로그래머스 - 섬 연결하기  (0) 2023.09.02
[Python] 프로그래머스 - 전화번호 목록  (0) 2023.08.25
[Python] 백준 20055번 - 컨베이어 벨트 위의 로봇  (0) 2023.08.23
[Python] 백준 15684번 - 사다리 조작  (0) 2023.08.23
    졍
    졍

    티스토리툴바