백준 일반 수학 1

2024. 12. 4. 17:39Algorithms/백준알고리즘 연습

2745번 

 

초기 코드

a = 'ZZZZZ'
b = 36
print(int(a,b))

아나콘다에 이렇게 돌리면 잘 받아옴

근데 

a,b = input().split()
print(int(a,b))

이렇게 쓰면 오류가 남

왜지?

n,b=input().split()
print(int(n,int(b)))

 

문제에  n이 주어진다고 했으니 n으로 바꾸어주고,

b를 str 형태로 받아왔으니 한번 더 int로 바꾸어주는 작업이 필요

쓰인 문법 : 

int(x, radix)

radix 진수로 표현된 문자열 x를 10진수로 변환하여 리턴한다.

 

11005번

10진법 --> n진법 만들기

초기 답안

n,b = map(int,input().split())

import string

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]

print(upper.convert(n,b))

 

 

정답 

n,b = map(int,input().split())

import string

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]
c = convert(n,b)
print(c.upper())

 

2720번 세탁소 사장 동혁

 

처음 작성한 코드

t = int(input())
for _ in range (t) :
    C = int(input())
    for i in range (4):
        b = C // 25 
        d = (C-b*25)//10
        e = (C-b*25-e*10)//5
        f = (C-b*25-*d10-e*5)//1

print(b,d,e,f, end = " ")

 

런타임 에러 뜸 (쉼표왜찍었지?)

지피티가 고쳐준코드

t = int(input())
for _ in range(t):
    C = int(input())
    b = C // 25
    d = (C - b * 25) // 10
    e = (C - b * 25 - d * 10) // 5
    f = (C - b * 25 - d * 10 - e * 5) // 1
    print(b, d, e, f, end=" ")

 

그래도 얼추맞았다.

 

다른 분 코드

changes = [25, 10, 5, 1]
T = int(input())

for _ in range(T) :
    C = int(input())
    res = []

    for i in changes :
        res.append(C // i)	# 몫이 개수
        C = C % i	# 나머지는 다시 C에 저장
        
    print(*res)
출처: https://calkolab.tistory.com/entry/baekjoon-python-2720 [CALKO LAB:티스토리]

더 간단하게 만들 수 있는데.. 저런 방법을 배우자 

 

2903번

중앙 이동 알고리즘   

초기 코드

n = int(input())
print(pow((pow(2,n)+1),2))
 

여기에서 적용되는 수학적 알고리즘은

점의 수 = (2^ㅜ+1)^2 라는 것만 알면 됨 

괄호 닫기 주의하자 

컴파일에러 자꾸 남

 

2292번 벌집

벌집의 규칙을 찾지 못했음

+1 늘어날때마다 6의 배수로 벌집의 갯수가 증가함 

7,19,37 에서 각각 1을 빼면 6,18,36 (*1,*3,*6) 

초기 코드

a = 1 =>1 
b = [2:7]까지 2
c = [8:19]까지 3
d = 20:37까지 4
... 
    
n = int(input())
ans = 0
while a in b :
	print('1')

 

이런식으로 루프 돌리려 하는데 맞는지 모르겠음..

수학적 공식을 알아야 함

 

다른분 답변 

n = int(input())

nums_pileup = 1  # 벌집의 개수, 1개부터 시작
cnt = 1
while n > nums_pileup :
    nums_pileup += 6 * cnt  # 벌집이 6의 배수로 증가
    cnt += 1  # 반복문을 반복하는 횟수
print(cnt)

출처 : https://ooyoung.tistory.com/82

 

백준 2292번 [파이썬 알고리즘] 벌집

[Python] 백준 알고리즘 온라인 저지 2292번 : 벌집 Python3 코드 n = int(input()) nums_pileup = 1 # 벌집의 개수, 1개부터 시작 cnt = 1 while n > nums_pileup : nums_pileup += 6 * cnt # 벌집이 6의 배수로 증가 cnt += 1 # 반복

ooyoung.tistory.com

루프가 n에 도달하면 멈춤.

예를 들어 n=5라고 하면 한번 루프가 돌면 nums_pileup은 6이 되고, n은 5이기때문에 한번 돌고 멈춤

cnt 에 1을 더한 값이 출력됨

= 2

루프를 돌리는것은 아는데 루프를 언제 

n 이 19인 경우 3번까지는 돌아가지만(19>18), 4번째부터는 안돌아감 

 

 

 

 

 

1193번 분수찾기 - 어렵다 

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

 

문제 해석

i 번은 1~n 까지

j 번도 1~m 까지 차례대로 1씩 입력되도록 넣고 map array를 만들어놓고 

루프 돌릴 때 지그재그로 돌리게 만들면되는데, (1,1), (2,1), (1,2), 이렇게 반복되어야 함 

그런데 무한한 배열은 어떻게 만들지...?

 

규칙 찾기 

1/1
1/2, 2/1
3/1, 2/2, 1/3
1/4, 2/3, 3/2, 4/1
5/1, 4/2, 3/3, 2/4, 1/5

 

1,3,5번줄에는 분자가 1늘어날때 분모가 1 줄어듬

2,4 (짝수) 줄에는 분자가 1줄어들때 분모가 1늘어남

 

몇번째줄 몇번째 위치인지 알려면

while num > line:
    num -= line
    line += 1

루프 사용

num = int(input())
line = 1

while num > line:
    num -= line
    line += 1

if 1 % 2 == 0 : #짝수인경우
	a = num
    b = line - num + 1
elif 1 % 2 == 1 : #홀수인경우
	a = line - num + 1
    b = num 
    
print(f'{a}/{b}') #스트링으로전환

 

출처 :https://velog.io/@hwsa1004/%EB%B0%B1%EC%A4%80-1193%EB%B2%88-%EB%B6%84%EC%88%98%EC%B0%BE%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%92%80%EC%9D%B4

 

[백준] 1193번 분수찾기 파이썬 풀이

죄금 으렵구만

velog.io

어떻게 이 과정을 생각해내지? 하면

순서대로 어떤 규칙/조건이 나에게 주어지는지 봐야함

1. 먼저 라인이 주어지고

2. 지그재그가 주어지는데

3. 라인이 변하면서 분수와 분모의크기가 규칙적으로 바뀜 ( 이 규칙을 알아야 함)

4. 라인의 번호와 분수/분모 크기 바뀌는 법칙의 변화가 어떻게 있는지 파악해야 함