일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DPDK
- 스프링
- 알고리즘
- 스프링부트
- springboot
- 개발자
- 파이썬
- Java
- 프로그래머스 #카카오 #IT #코딩테스트
- 자바
- Elasticsearch
- IT
- 카카오
- 캐시
- 엘라스틱서치
- 네트워크
- 프로그래머스
- Linux
- 리눅스
- programmers
- 도커
- Kakao
- Python
- 쿠버네티스
- C
- Spring
- 운영체제
- docker
- 백엔드
- 코딩테스트
- Today
- Total
저고데
[프로그래머스]마법의 엘리베이터 본문
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/148653
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드를 작성하기 위한 순서는 다음과 같다.
1. 각 자리의 숫자를 구해준다.
2. 각 자리 숫자가 0에 가까우면(5 미만) 그 값만큼 빼줘서 0으로 만들고, 10에 가까우면(5 초과) 10에 부족한 만큼 더해줘서 10으로 만들고 그 다음 자릿수에 1을 더해준다.
3. 5일 때가 가장 까다로운데, 다음 자릿 수를 신경써서 더할 지 뺄 지를 결정해야한다. 만약 다음 자릿 수에 1을 더했을 때, 5 이상이면 더하는 것이 최소이므로 더해주고, 5 미만이면 빼는 것이 최소이므로 빼준다.
4. 999의 경우, 모든 작업을 완료하면 res=[0, 0, 10]이 될 것이다. 따라서 끝 자리가 10일 때는 1로 바꿔줘서 계산한다.
5. 모든 작업을 완료했을 때, 600이 되었다면 마지막 자릿 수도 올림하여 1000을 만들어주는 것이 최소로 만들 수 있다. 따라서 첫번째 자리 숫자가 5 초과라면(5일 경우에는 올림하는 방법이 최소가 아니다.) 숫자를 올려서 4번을 실행한 후 리스트의 마지막 원소를 반환한다.
def solution(storey):
answer = 0
res = [] #1번 : 각 자리수를 담을 리스트
num = storey
while num >= 1: #1번
res.append(num%10)
num //= 10
for i in range(len(res)-1):
if res[i] < 5: #2번
answer += res[i]
res[i] = 0
elif res[i] > 5: #2번
answer += 10-res[i]
res[i+1] += 1
res[i] = 0
else: #3번
if res[i+1] >= 5:
answer += 10-res[i]
res[i+1] += 1
res[i] = 0
else:
answer += res[i]
res[i] = 0
if res[-1] == 10: #4번
answer += 1
return answer
elif res[-1] > 5: #5번
answer += 10-res[-1]
res[-1] = 10
else:
answer += res[-1]
if res[-1] == 10: #5번
answer += 1
return answer
5일 때를 신경쓰는 것이 이 문제의 핵심이었다.
그 뿐만 아니라, 여러 반례를 신경써서 각 조건에 맞는 코드를 작성하는 것도 좋은 방법이었던 것 같다.
어떤 문제든지, 학문적인 측면에서 증명하는 것이 좋은 방법이지만 예시(반례)를 사용하여 증명하는 것도 꽤나 매력적인 방법같다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스]무인도 여행 (1) | 2023.02.15 |
---|---|
[프로그래머스]표 편집 (0) | 2023.02.14 |
[프로그래머스]혼자 놀기의 달인 (0) | 2023.02.14 |
[프로그래머스]스티커 모으기(2) (0) | 2023.02.14 |
[프로그래머스]기지국 설치 (0) | 2023.02.12 |