일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SQL
- 코딩봉사
- 데이터베이스
- 자바
- python
- 문제풀이
- SW봉사
- MYSQL
- 백준알고리즘
- 프로그래머스
- 소프티어
- 알고리즘
- 1과목
- CJ UNIT
- BFS
- C++
- 시나공
- 코딩교육봉사
- 회고
- 공부일지
- 코틀린
- kotlin
- 파이썬
- 정보처리산업기사
- 백준
- 스프링
- java
- softeer
- 백준 알고리즘
- programmers
- Today
- Total
JIE0025
[BOJ - 수학] 4375번 : 1 ( python ) 본문
백준 4375번 (실버3) 파이썬
https://www.acmicpc.net/problem/4375
문제
2와 5로 나누어 떨어지지 않는 정수 n(1<=n<=10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오
입력은 여러개의 테스트 케이스
각 테스트 케이스는 한줄로 이루어져 있고 n이 주어짐
출력은 1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.
- 시간제한 1초
- 메모리 제한 128mb
문제 이해
이문제는 입력 n에 대해
1로만 이루어진 n의 배수 중 가장 작은 수는 몇개의 자리수를 갖고 있는가 출력해주면 되는 문제이다.
만약 3이 입력으로 주어지면 111이 1로만 이루어진 가장 작은 3의 배수가 되므로
출력은 111의 자리수인 3이다.
전체 소스코드
1) 여러번의 테스트 케이스를 받아야 하므로 무한반복문으로 숫자를 받아주었다.
try except를 이용해 입력 예외가 발생할경우 break해주었다.
2) n = int(input())
input받은 값을 바로 int로 치환하여 n에 담았다.
3) i = 1
i는 num의 자리수를 체크하기 위한 변수이다.
반복문을 돌 때마다 num이 10을 곱하고 1을 더해주는 연산을 통해
1, 11,111,1111… 이렇게 자리수가 1개씩 증가하는데, 이 자리수를 세기 위해 i를 쓴다.
4) num = 0 (초기화)
num = num*10+1
while문에서
이전 num값에 10을 곱하고 1을 더해준다
num = 0
num = 0 * 10 +1 >> num은 1
num = 1 * 10 +1 >> num은 11
num = 11 * 10 +1 >> num은 111
.
.
.
이렇게 num값을 만든 후, num값이 입력값 n의 배수인지 확인을 해준다.
5) num %= n
여기서 num을 %n을 바로 해주면 num 값이 바뀌어서 다시 while문 돌 때 괜찮을까 싶은데
(a*b)%c == (a%c*b%c)%c와 같아서
111 % 3 == (11 * 10 + 1) %3 이고
결국 (11%3 * 10 + 1 ) % 3 이므로
이전 num 값을 아예 계산 한 후 바로 대입해주어도 결과는 똑같다.
검산
- n==3, i ==1, num == 0
- num == 0*10+1 == 1
1 %= 3 >> num== 1
if num!=0이므로 i +=1 >> i == 2
- num == 1*10+1 == 11
11%=3 >> num== 2
if num!=0이므로 i +=1 >> i == 3
- num == 2*10+1 == 21
21%=3 >> num==0
if num==0이므로 print i == 3, break
코테 초보한테는 어려웠다 ㅠㅠ
'알고리즘' 카테고리의 다른 글
[ 알고리즘 ] 슬라이딩 윈도우 (0) | 2022.05.27 |
---|---|
[BOJ - BFS] 14940번 : 쉬운 최단거리 ( python ) (0) | 2022.04.15 |
[백준알고리즘] 2798번 : 블랙잭, 파이썬 (0) | 2021.03.11 |
[백준알고리즘] 1966번 : 프린터큐, 파이썬 (0) | 2021.03.10 |
[백준알고리즘] 14888번 : 연산자 끼워넣기 #스터디 3주차 (0) | 2020.06.13 |