일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UnitTest
- Kotlin
- Di
- 안정성
- 안드로이드 디자인패턴
- 테스트의 장점
- rxjava
- Python
- Room
- 안드로이드
- 단위테스트
- compose
- MVVM
- 제한함수
- mock
- 컴포즈
- 코틀린
- git
- 코딩테스트
- dagger2
- 유닛테스트
- ViewModel
- 공격적 프로그래밍
- 깃
- 디자인패턴
- Jetpack
- 자료구조
- Android
- 파이썬
- Observable
Archives
- Today
- Total
세상을 바꾸는 개발자
[코딩테스트] 1이 될때까지(파이썬) 본문
< 1이 될 때까지 > : 난이도 하
[문제]
어떠한 수 N이 1이 될 때까지 다음 두 과정 중 하나를 반복해서 수행한다. 두 과정은 아래와 같다.
- N에서 1을 뺀다.
- N을 K로 나눈다. (단, 나눌 수 있는 경우만 해당된다.)
예를 들어서 N이 17이고, K가 4라면 처음에는 나눌 수 없으므로 1을 뺀다. 그 뒤 16이 되면 K값 4로 나눌 수 있기 때문에 나누어준다. 그러면 4가 되는데 또 K값으로 나눠줄 수 있기 때문에 나눠주면 1 이므로 종료된다.
이때 결과는 총 3번 과정을 수행했으므로 3을 출력하면 된다.
[입력 조건]
- 입력은 한 줄로 N과 K가 공백으로 구분되어 주어진다. 이때 조건은 N(2 <= N <= 100,000), K(2 <= K <= 100,000), N >= K이다.
[출력 조건]
- 첫째 줄에 N이 1이 될 때까지 1번 or 2번의 과정을 수행하는 횟수의 최솟값을 출력하면 된다.
[출력 조건]
- 입력 25 5
- 출력 2
[나만의 풀이]
n, k = map(int, input("N의 값과 나눌 K의 값을 입력하세요").split())
count = 0;
while n > 0:
if n % k == 0 :
n = n // k
count += 1
else:
n -= 1
count += 1
if(n == 1) : break
print("횟수는 :: %d 입니다" %count)
실행결과
< 나의 풀이 방법 >
사실 이 문제는 쉬운 문제 중에서도 쉬운 문제지 않나 싶어요~
사용자에게 n, k를 입력을 받고 n을 k로 1이 될 때까지 나누면 되는데 이때 나누어지지 않으면 n을 -1하고 다시 나누는 것입니다.
n을 1이 될 때까지 나누거나 -1을 한 횟수를 출력해주면 손쉽게 풀 수 있는 문제였습니다.
참고한 책주소
'코딩테스트 > Python' 카테고리의 다른 글
[코딩테스트] 왕실의 나이트 (파이썬) (1) | 2021.09.01 |
---|---|
[코딩테스트] 시각 (파이썬) (0) | 2021.09.01 |
[코딩테스트] 상하좌우(파이썬) (3) | 2021.08.30 |
[코딩테스트] 숫자 카드게임(파이썬) (0) | 2021.08.30 |
[코딩테스트] 큰수의 법칙(파이썬) (0) | 2021.08.30 |
Comments