6/ 04 파이썬 공부
1. 백준 19946 2의 제곱수 계산하기
태영이의 취미는 2의 제곱수를 계산하는 것이다.
태영이는 264 = 18,446,744,073,709,551,616 이라는 것을 알고 있고 직접 20부터 2씩 곱해서 264을 구할 것이다.
하지만 태영이는 2씩 곱하는 와중에 1을 빼버리는 실수를 딱 한 번 해버리고 말았다.
(실수는 단 한 번만 하며, 그 후에는 2로 곱하는 계산을 정확하게 수행한다.)
예를 들어, 21 = 2로 계산을 잘 하다가 22 = 3으로 계산해버리는 어이없는 실수를 해버리는 것이다.
그렇게 된다면 23 = 6 , 24 = 12 ... 로 계산하여 점점 오차가 커진다.
태영이가 구한 264인 N이 주어졌을 때, 태영이가 처음으로 실수한 구간을 찾아주자.
양의 정수 N이 주어진다.
N은 태영이가 264를 계산했을 때 나올 수 있는 수이다.
태영이가 처음으로 실수한 구간을 찾아주자.
2K = 2K-1로 계산해버렸을 때의 K를 출력하면 된다.
>>>코드
n = int(input())
i = 64
while True:
if n%2 == 0:
n = n//2
i -= 1
else:
break
print(i)
2. 백준 16462 '나교수' 교수님의 악필
‘나교수’ 교수님은 한양대학교 내에서 악필로 유명하신 분이다. ‘나교수’ 교수님이 악필로 악명을 떨치게 된 이유는 바로 숫자에 있다. ‘나교수’ 교수님은 평소 단순함을 강조한 나머지 ‘0’과 ‘6’ 그리고 ‘9’가 구분이 안 될 정도로 단순하게 쓰신다. (단순이라 쓰고 대충이라 읽도록 하자.)
중간고사가 끝난 후 ‘나교수’ 교수님 수업의 조교를 맡은 ‘나조교’ 조교님은 굉장히 곤란한 상황에 빠져있다. ‘나교수’ 교수님께서 성적을 채점한 학생들의 시험지를 주면서 지금 당장 학생들의 평균 성적을 알려 달라고 하셨기 때문이다. 문제는 ‘나교수’ 교수님께서 적으신 학생들의 성적이 악필로 인해 제대로 확인을 못한다는 것이다. 평소 ‘나교수’ 교수님의 단순한 성격을 존경해왔던 ‘나조교’ 조교님은 구분이 되지않는 숫자 ‘0’, ‘6’, ‘9’를 학생들의 기쁨을 위해 ‘9’로 통일시켜 버리기로 하였다. (단, 점수가 100점이 넘는 경우 100점으로 처리한다.)
이제 ‘나교수’ 교수님 수업의 또 다른 조교인 당신이 ‘나조교’ 조교님을 도와 학생들의 평균을 구해주도록 하자.
첫째 줄에 학생의 수 N이 주어진다. (1 ≤ N ≤ 1,000)
다음 N개의 줄에는 ‘나교수’교수님이 적으신 학생들의 성적 정수 Qi가 차례대로 주어진다. (1 ≤ Qi ≤ 100)
첫째 줄에 ‘나조교’ 조교님이 계산한 학생들의 평균 성적과 가장 가까운 정수를 출력한다.
그런 정수가 여러 개라면 그 중 가장 큰 것을 출력한다.
>>>코드
import sys
n = int(input())
l = []
for i in range(n):
s = input()
if int(s) < 100:
s = s.replace('0', '9')
s = s.replace('6', '9')
else:
s = '100'
l.append(float(s))
mean = sum(l)/n
if mean - int(mean) >= 0.5:
print(int(mean) + 1)
else:
print(int(mean))
반올림 함수 round가 있지만
이건 0.5인 경우에 내려버리므로 새로운 함수를 만들거나 조건문으로 처리해야한다.
왜 이렇게 만들었을까...
1) 교한 함수: 문자열.replace('바꿀 문자', '새로 들어갈 문자')
ex)
s = 'Hello, World'.replace('World', 'BOJ')
>>>
s = 'Hello, BOJ'
3. 백준 23027 1번부터 문제의 상태가...?
큰일이다. 시험 문제를 본 쿠기는 1번부터 풀 수가 없다. 시험 시간 동안 할 일이 없었던 쿠기는 교수님께 편지를 쓰려고 한다. 작년 시험에서 교수님께 그동안 감사했다는 편지를 전하고 D+을 받았던 기억이 있다. 그때 성적이 문제였는지, 편지가 문제였는지 궁금하여 이번에도 1번 문제의 답안 칸에 편지를 작성하려고 한다. 혹시나 하는 마음에 쿠기는 D+만은 피하고자 편지를 수정하려고 한다.
(1) 편지의 내용 S에 'A'가 있다면 S에 있는 'B', 'C', 'D', 'F'를 모두 'A'로 변경한다.
(2) 'A'가 없고 'B'가 있다면 S에 있는 'C', 'D', 'F'를 모두 'B'로 변경한다.
(3) 'A'와 'B'가 없고 'C'가 있다면 S에 있는 'D', 'F'를 모두 'C'로 변경한다.
(4) 'A', 'B'와 'C'가 모두 없다면 S에 있는 모든 문자를 'A'로 변경한다.
쿠기를 도와 편지를 수정하는 것을 도와주자.
편지의 내용 S(1 ≤ S 의 길이 ≤ 1,000)가 주어진다. 문자열 S는 알파벳 대문자로 이루어져 있다.
수정된 편지의 내용을 출력한다.
>>>코드
s = input()
if 'A' in s:
s = s.replace('B', 'A')
s = s.replace('C', 'A')
s = s.replace('D', 'A')
s = s.replace('F', 'A')
elif 'B' in s:
s = s.replace('C', 'B')
s = s.replace('D', 'B')
s = s.replace('F', 'B')
elif 'C' in s:
s = s.replace('D', 'C')
s = s.replace('F', 'C')
else:
s = 'A' * len(s)
print(s)
'백준 > 백준 파이썬' 카테고리의 다른 글
백준 파이썬 Today I Learn 2023.06.06 (0) | 2023.06.07 |
---|---|
백준 파이썬 Today I Learn 2023.06.05 (1) | 2023.06.07 |
백준 파이썬 Today I Learn 2023.06.03 (2) | 2023.06.05 |
백준 파이썬 Today I Learn 2023.06.02 (0) | 2023.06.05 |
백준 파이썬 Today I Learn 2023.06.01 (0) | 2023.06.04 |