6/ 11 파이썬 공부
1. 백준 9493 길면 기차, 기차는 빨라, 빠른 것은 비행기
기차보다 빠른 비행기를 타기 위해 더 많은 돈을 지불하는것이 과연 그만한 가치가 있는 것일까?
거리 M(Km)이 주어졌을때 기차의 속도 A(Km/h)와 비행기의 속도 B(Km/h)로 달렸을때 발생하는 시간의 차를 계산하여라.
한 줄에 테스트 케이스가 하나씩 주어진다.
각 테스트 케이스는 세 개의 정수 M(1 ≤ M ≤ 10,000), A 그리고 B(1 ≤ A < B ≤ 1000)로 이루어져 있다.
정수는 공백으로 구분되어 있다.
마지막 테스트 케이스는 0 세 개로 나타내며, 따로 처리하지 않고 프로그램을 종료한다.
각 테스트 케이스마다 다음 형식으로 시간을 출력한다.
H:MM:SS
분(MM)과 초(SS)는 모두 2자리로 표현되며 그렇기에 필요에 따라 0을 출력하는 경우도 존재한다.
초(Second)는 반올림하고, 시(Hour)는 최소 자리로 나타낸다.
출력에 공백은 없으며 테스트 케이스 사이에 빈 줄은 출력하지 않는다.
>>>코드
while True:
m, a, b = map(float, input().split())
if m == 0 and a == 0 and b == 0:
break
r = abs((m/a * 3600) - (m/b * 3600))
h, m, s = str(int(r//3600)), str(int(r%3600//60)), str(int(round(r%60)))
print('%s:%s:%s' %(h, m.zfill(2), s.zfill(2)))
1) """문자열""" 앞에 0 채우기
문자열 x.zfill(자리수): 자리수 에서 부족한 만큼 0 채우기
ex)
a = '23'
print(a.zfill(4))
>>> 0023
2. 백준 4388 받아올림
어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다.
받아올림이란 영어로는 carry라고 하며, 한 자리를 더했을 때, 두 자리라면, 1을 왼쪽 자리로 올려주는 것을 뜻한다.
두 수가 주어졌을 때, 이러한 받아올림이 몇 번 발생하는지 구하는 프로그램을 작성하시오.
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 10자리 이내의 양의 정수 또는 0이 주어진다. 입력의 마지막 줄에는 0 0이 있다.
각 테스트 케이스에 대해서, 입력으로 주어진 두 수를 더할때 나오는 받아올림의 개수를 출력한다.
>>>코드
while True:
a, b = map(int, input().split())
r = 0
if a == 0 and b == 0:
break
for i in range(max(len(str(a)), len(str(b)))):
if (a%(10**(i+1))) + (b%(10**(i+1))) >= 10**(i+1):
r += 1
print(r)
자리수가 안정해져 있기 때문에 a, b 중 더 큰 자리수를 가진 친구를 기준으로 코드를 짰다.
3. 백준 2948 2009년
2009년 날짜가 주어졌을 때, 무슨 요일인지 출력하는 프로그램을 작성하시오.
첫째 줄에 D와 M이 주어진다. M월 D일이다.
2009년 M월 D일의 요일을 영어로 출력한다. 출력은 다음 중 하나이다.
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday".
>>>코드
W = ["Thursday", "Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"]
M = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
d, m = map(int, input().split())
i = (sum(M[:m-1]) + d - 1) % 7
print(W[i])
1월 1일이 목요일이기 때문에 요일을 목요일부터 시작되게 리스트를 만들었다.
4. 백준 2998 8진수
창영이는 여러 가지 진법을 공부하고 있다. 창영이는 어제 2진법을 배웠고, 오늘은 8진법을 배웠다.
이제, 2진법 수를 8진법 수로 변환하려고 한다.
창영이가 사용한 방법은 다음과 같다.
(1) 2진수의 길이가 3으로 나누어 떨어질 때 까지 수의 앞에 0을 붙인다.
(2) 그 다음, 3자리씩 그룹을 나눈다.
(3) 아래의 표를 참고해 8진수로 바꾼다.
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
2진수가 주어졌을 때, 창영이가 사용한 방법을 이용해 8진수로 바꾸는 프로그램을 작성하시오.
첫째 줄에 2진수가 주어진다. 이 수는 100자리 이내이고, 첫 번째 자리는 1이다.
첫째 줄에 8진수를 출력한다.
>>>코드 1
print(oct(int(input(), 2))[2::])
파이썬에는 8진법 지원 함수인 oct() 가 존재한다.
문제에서 이야기한 방법으로도 풀어보자
>>>코드2
notation = {'000':'0','001':'1','010':'2','011':'3','100':'4','101':'5','110':'6','111':'7'}
n = input()
while len(n) % 3 !=0:
n = '0' + n
for i in range(3, len(n) + 1, 3):
s = n[i-3:i]
print(notation[s], end = '')
딕셔너리에 저장한후 불러왔다.
5. 백준 11816 8진수, 10진수, 16진수
정수 X가 주어진다. 정수 X는 항상 8진수, 10진수, 16진수 중에 하나이다.
8진수인 경우에는 수의 앞에 0이 주어지고, 16진수인 경우에는 0x가 주어진다.
X를 10진수로 바꿔서 출력하는 프로그램을 작성하시오.
첫째 줄에 X가 주어진다. X는 10진수로 바꿨을 때, 1,000,000보다 작거나 같은 자연수이다.
16진수인 경우 알파벳은 소문자로만 이루어져 있다.
첫째 줄에 입력받은 X를 10진수로 바꿔서 출력한다.
>>>코드
n = input()
if n[:2] == '0x':
print(int(n[2::], 16))
elif n[0] == '0':
print(int(n[1::], 8))
else:
print(int(n))
'백준 > 백준 파이썬' 카테고리의 다른 글
백준 파이썬 Today I Learn 2023.06.14 (0) | 2023.06.19 |
---|---|
백준 파이썬 Today I Learn 2023.06.12 (2) | 2023.06.13 |
백준 파이썬 Today I Learn 2023.06.10 (1) | 2023.06.12 |
백준 파이썬 Today I Learn 2023.06.09 (0) | 2023.06.12 |
백준 파이썬 Today I Learn 2023.06.08 (0) | 2023.06.10 |