본문 바로가기

PS/BOJ : 단계별로 풀어보기

백준 [단계별로 풀어보기]: (8단계) "일반 수학 1", python

반응형

백준 [단계별로 풀어보기]: (8단계) "일반 수학 1", python

 

1. 문제번호 및 정답비율

8단계 일반 수학1 : 문제번호 및 정답 비율

2. 문제별 필요 지식 및 풀이 포인트

더보기

# 1. 2745 진법 변환
int(n, b) : b진법의 수 n을 10진법으로 표현
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

 

# 2. 11005 진법 변환2

list[::-1] : 리스트 뒤집기

 

# 3. 2720 세탁소 시장 동혁

다른 사람 풀이도 참고


# 4. 2903 중앙 이동 알고리즘


# 5. 2292 벌집

점화식 생각 도출해내기 : 1, 1+6=7, 1+6+12=7+12=19, 1+6+12+18=19+18=37, ... : an =1; an += 6*n


# 6. 1193 분수찾기
다시 풀기, 어려움


# 7. 2869 달팽이는 올라가고 싶다

day = a-b #하루에 갈 수 있는 거리, 1
heights = v-b #올라가야 할 거리, 4


3. 문제별 풀이 코드

# 1. 2745 진법 변환
'''int(n, b) = b진법의 수 n을 10진법으로 표현'''
n, b = input().split()
print(int(n, int(b))) #int(zzzzz, 36) = 36진법의 수 zzzzz를 10진법으로 바꿔줌

'''일반적풀이'''
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 0부터Z까지 포함된 문자열을 활용, 이 문자열의 index가 값이 된다.

n, b = input().split() #n에 대문자 입력, b진법수 n
n = n[::-1] # list[::-1]: 리스트순서뒤집기
b = int(b) # input값 int변환

result = 0
for i in range(len(n)):
    result += b**i * num_list.index(n[i])
print(result)


# 2. 11005 진법 변환2
'''ex)256%10 = 6, 256 <= 25(초기화)
      25%10 = 5, 25 <= 2(초기화)
      2%10 = 2
      652 -> 뒤집기 -> 256'''

n, b = map(int, input().split()) #60466175 36
num_list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

result = ""
while n != 0:
    result += num_list[n%b] #b로 나눈 나머지값 연결
    n //= b #n값 초기화
print(result[::-1])


# 3. 2720 세탁소 시장 동혁
'''출력 관련해서, 다른 풀이도 참고'''
t = int(input()) #3
prices = [int(input()) for _ in range(t)] #124 25 194
array = [25, 10, 5, 1] #동전 종류

cnt = []
for i in range(t):
    for coin in array:
        cnt.append(prices[i] // coin)
        prices[i] %= coin #124//25 후 나머지 24를 초기화
#print(cnt) #[4, 2, 0, 4, 1, 0, 0, 0, 7, 1, 1, 4]

print(*cnt, end=' ') #4 2 0 4 1 0 0 0 7 1 1 4 / *args와 **kwargs이용


# 4. 2903 중앙 이동 알고리즘
'''점의개수: 2x2=4=2**2, 3x3=9=3**2, 5x5=25=5**2'''
n = int(input())
print((2**n+1)**2)


# 5. 2292 벌집
#1, 1+6=7, 1+6+12=7+12=19, 1+6+12+18=19+18=37, ... : an =1; an += 6*n

routes = int(input()) #13

an = 1; nums = 1
while routes > an: #point! 입력값 > 점화식 이면, +1 해 출력한다
    an += 6*nums
    nums += 1
print(nums) #3


# 6. 1193 분수찾기
'''다시 풀기/어려움'''
1+2+3+4+5+6+...
line
1  1/1
2  1/2 2/1 : +1/-1꼴
3  3/1 2/2 1/3
4  1/4 2/3 3/2 4/1 : +1/-1꼴
5  5/1 4/2 3/3 2/4 1/5 ...

num = int(input()) #4

line = 1
if line%2 == 0:
    a = 
    b =
else:

print(a + '/' + b)


# 7. 2869 달팽이는 올라가고 싶다
a, b, v = map(int, input().split()) #2 1 5

day = a-b #하루에 갈 수 있는 거리, 1
heights = v-b #올라가야 할 거리, 4
if heights%day == 0: #나머지가 0이면, 낮동안 정상 도달
    print(heights//day)
else: #나머지가 0이 아니면, 밤에 미끄러져서 하루+1해야
    print(heights//day+1)
반응형