[프로그래머스 / Level 2] 카펫 (파이썬)

2022. 9. 23. 23:01·🎲 알고리즘 공부/프로그래머스

[문제]

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

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

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

 

입출력 예시

 

 

 

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

 

프로그래머스

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

programmers.co.kr


🎨 풀이

💡 전체 코드

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

    total = brown + yellow

    for num in range(3,total//2):
        if total % num == 0:
            a = total // num
            b = num
            if (a-2) * (b-2) == yellow :
                answer.append(a)
                answer.append(b)
                break
    answer.sort(reverse=True)
    
    return answer

> 핵심 : yellow = (x-2) * (y-2)

설명을 돕기 위한 그림

 

 

 

🍦 코드 설명 (실행 순서대로 나열)

#solution

    answer = []

    total = brown + yellow

1. 변수와 리스트를 초기화한다.

- answer : 정답 (리스트)

- total : 총 칸 수 (brown + yellow)

 

 

#solution - 가로, 세로 구하기

    for num in range(3,total//2):
        if total % num == 0:
            a = total // num
            b = num
            if (a-2) * (b-2) == yellow :
                answer.append(a)
                answer.append(b)
                break

2. 3부터 total//2 까지 for문을 실행한다.

 - 1, 2를 패스한 이유는 가로 세로 중 하나가 그 숫자라면 yellow가 들어갈 자리가 없기 때문이다.

  ( 문제에서 yellow는 1 이상이라고 함)

 - [3, 12] / [12, 3] 를 같은 경우라고 보기 때문에 절반만 실행해도 된다.

 

# total이 num으로 나누어떨어지는 경우

3. a에 total // num, b에 num을 넣는다.

 - (ex) total = 12 , num = 3 => a = 4, b = 3

4. 만약 (a-2) * (b-2) 가 yellow와 같다면 answer에 a와 b를 넣은 후 for문을 종료한다. 

 

 

    answer.sort(reverse=True)
    
    return answer

5. answer을 역순으로 정렬한다.

 - 가로길이가 더 길다고 나와있고, 정답은 [가로,세로] 순서라고 문제에 적혀있기 때문이다.

6. answer을 return한다.

 

 


끝~

⭐ 느낀점

> 그림 그려서 풀다보니까 저 yellow 구하는 공식을 깨달았다. 나중에는 완전탐색으로도 한 번 풀어봐야겠다. 아직 감은 안잡히지만 나중에 성장하면 할 수 있을듯. ㅎ_ㅎ 파이팅!

저작자표시 (새창열림)

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 2] 프린터 (파이썬)  (0) 2022.09.26
[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)  (0) 2022.09.24
[프로그래머스 / Level 2] 기능개발 (파이썬)  (0) 2022.09.22
[프로그래머스 / Level 2] JadenCase 문자열 만들기 (파이썬)  (0) 2022.09.22
[프로그래머스 / Level 2] 피보나치 수 (파이썬)  (0) 2022.09.20
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 2] 프린터 (파이썬)
  • [프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)
  • [프로그래머스 / Level 2] 기능개발 (파이썬)
  • [프로그래머스 / Level 2] JadenCase 문자열 만들기 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    스프링부트
    코테
    til
    충무로
    정보처리기사
    행렬덧셈
    백준
    nodejs
    피보나치수
    정처기
    폰켓몬
    50문답
    신입일기
    코민이
    찬양추천
    코린이
    코드업
    파이썬
    프로그래머스
    codeup
    오블완
    BOJ
    티스토리챌린지
    오버워치
    컨텐더스
    스프링 부트
    연습문제
    카카오
    6월 목표
    일기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 2] 카펫 (파이썬)
상단으로

티스토리툴바