프로그래머스/Python
[프로그래머스] 카펫 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트
우당탕탕 개발자
2023. 7. 8. 13:57
728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 설명
2. 풀이과정
노란색 카펫 모양의 가로의 길이와 세로의 길이를 구하고 그 테두리를 갈색으로 채웠을 때 가로의 길이가 세로의 길이보다 같거나 큰 직사각형 모양의 카펫이 되면 된다.
- 노란색 카펫의 세로 길이를 저장할 변수를 생성하고 세로의 최소 길이인 1로 초기화한다. i = 1
- 원하는 지점에서 멈추기 위해 무한 반복문으로 구현한다. while (True)
- 만약 세로의 길이로 노란색 카펫의 개수를 나누었을 때 나누어 떨어지면 if (yellow % i == 0)
- 노란색 카펫의 모양이 정해진 경우이므로 그 주변으로 갈색 카펫을 배치하여 개수가 동일하면 된다. 따라서 노란색 카펫의 가로의 길이 * 2와 노란색 카펫의 세로의 길이 * 2를 더하고 네 뒤퉁이 4칸을 더해준 결과가 갈색 카펫의 개수와 일치하면 if (brown == (yellow // i * 2) + (i * 2) + 4)
- 전체 카펫의 가로의 길이(노란색 카펫의 가로 길이 + 2)를 추가하고 answer.append(yellow // i + 2)
- 전체 카펫의 세로의 길이(노란색 카펫의 세로 길이 + 2)를 추가한다. answer.append(i + 2)
- 전체 카펫의 가로와 세로의 길이를 구했으므로 종료한다. break
- 구하지 못했다면 노란색 카펫의 세로 길이를 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
반응형