본문 바로가기
프로그래머스/Python

[프로그래머스] 카펫 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 8.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

노란색 카펫 모양의 가로의 길이와 세로의 길이를 구하고 그 테두리를 갈색으로 채웠을 때 가로의 길이가 세로의 길이보다 같거나 큰 직사각형 모양의 카펫이 되면 된다.

 

  1. 노란색 카펫의 세로 길이를 저장할 변수를 생성하고 세로의 최소 길이인 1로 초기화한다. i = 1
  2. 원하는 지점에서 멈추기 위해 무한 반복문으로 구현한다. while (True)
  3. 만약 세로의 길이로 노란색 카펫의 개수를 나누었을 때 나누어 떨어지면 if (yellow % i == 0)
  4. 노란색 카펫의 모양이 정해진 경우이므로 그 주변으로 갈색 카펫을 배치하여 개수가 동일하면 된다. 따라서 노란색 카펫의 가로의 길이 * 2와 노란색 카펫의 세로의 길이 * 2를 더하고 네 뒤퉁이 4칸을 더해준 결과가 갈색 카펫의 개수와 일치하면 if (brown == (yellow // i * 2) + (i * 2) + 4)
  5. 전체 카펫의 가로의 길이(노란색 카펫의 가로 길이 + 2)를 추가하고 answer.append(yellow // i + 2)
  6. 전체 카펫의 세로의 길이(노란색 카펫의 세로 길이 + 2)를 추가한다. answer.append(i + 2)
  7. 전체 카펫의 가로와 세로의 길이를 구했으므로 종료한다. break
  8. 구하지 못했다면 노란색 카펫의 세로 길이를 1 증가하고 반복을 이어서 진행한다. i += 1
반응형

3. 소스코드

def solution(brown, yellow):
    answer = []
    
    i = 1
    while (True):
        if (yellow % i == 0):
            if (brown == (yellow // i * 2) + (i * 2) + 4):
                answer.append(yellow // i + 2)
                answer.append(i + 2)
                break
        i += 1
        
    return answer
728x90
반응형