일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- ssd
- 실전알고리즘
- 머신러닝
- SWEA
- 코드수행
- 백준
- 자료구조 및 실습
- AWS
- MySQL
- 이것이 코딩테스트다 with 파이썬
- ubuntu
- Python
- 그리디
- 1단계
- 딥러닝
- pytorch
- C++
- cs
- 전산기초
- 2단계
- test-helper
- 모두를 위한 딥러닝 강좌 시즌1
- Object detection
- STL
- docker
- 프로그래머스
- 파이썬
- 3단계
- 구현
- CS231n
- Today
- Total
곰퓨타의 SW 이야기
[프로그래머스 level2 카펫] 수학적 사고를 기르자! 본문
level2 문제 중에 가장 시간이 덜 걸렸던 것 같다. 앞으로 이러한 문제를 풀 때 어떻게 할 지에 대해 정리해놓고자 작성하게 되었다.
오늘 해결해야하는 문제는 다음과 같았다.
programmers.co.kr/learn/courses/30/lessons/42842
코딩테스트 연습 - 카펫
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과
programmers.co.kr
[문제설명]
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
[제한사항]
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
[입출력 예]
brown | yellow | return |
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
그림을 보고 약수가 생각났다. yellow가 24인 경우 (1,24), (2,12), (3,8), (4,6)의 경우가 가능한 것이고,
brown에서 꼭지점에 해당하는 4가지 부분을 뺀 경우, yellow의 각변을 감쌀 것이다.
따라서, yellow의 약수들을 찾아내고 약수의 합이 모서리 4 부분을 뺀 경우 //2 가 같은 경우가 해당 brown, yellow가 잘 맞아떨어지는 경우이다.
잘 맞아 떨어지는 경우, 가로와 세로의 양 쪽 모서리를 더해주도록 하기 위해 +2 하여 구현하였다.
이러한 생각을 통해 구현한 코드는 다음과 같다.
import math
def solution(brown, yellow):
answer = []
square = brown - 4
square /= 2
yellow_yaksu = []
for i in range(1,int(math.sqrt(yellow))+1):
if yellow%i == 0:
yellow_yaksu.append((i,yellow // i))
for i in yellow_yaksu :
if i[0] + i[1] == square :
answer.append(i[1]+2)
answer.append(i[0]+2)
break
return answer
도형 문제에 있어서는 약수와 덧셈, 모서리를 생각해야겠다는 것을 알 수 있었다.
--> 도형 문제를 보고 삼각 달팽이 문제가 생각났는데 이 때에도 나머지와 나눗셈을 활용했던 것과 같이 끊임없이 수학이랑 연결시키는 연습을 해야겠다!
'TIL > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level2 가장 큰 정사각형 찾기] 이런 신박한 방법이 있다니! (0) | 2021.01.02 |
---|---|
[프로그래머스 level2 타겟넘버] 이렇게 다양한 풀이가 존재하다니! (0) | 2021.01.02 |
[프로그래머스 level2 구명보트] 효율성 테스트를 뿌시자! (0) | 2021.01.01 |
[프로그래머스 level2 위장] Counter를 활용하면 쉽게 풀린다구?? (0) | 2020.12.31 |
[프로그래머스 level2 괄호 변환] 상황을 조건문으로 잘 분할하자! (0) | 2020.12.30 |