반응형

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

문제

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.

자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력

첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.


# 숫자를 입력받기
N = int(input())
# 출력될 값
ans = 0

# 입력 값부터 0으로 거꾸로 돌면서 입력값에서 빼준다
# 거꾸로 도는 이유는 가장 작은 생성자를 구하기 위해서
# 1에서 부터 돌면 가장 큰 생성자를 출력한다.
for i in range(N, 0,-1):
    # 생성자는 입력 받은 수에서 i 만큼을 빼준 수
    make_num = N - i
    # 생성자 자릿수를 리스트로 생성
    make_num_list = list(map(int, str(make_num)))
    # print(make_num_list)
    make_num_list_add = 0
    # 생성된 리스트를 다 더해서 make_num_list 에 넣어줌
    for num in make_num_list:
        make_num_list_add += num
    # print(make_num_list_add)
    # 만약 자릿수를 모두 합한 값과 i(입력받은 수에서 빼준 값)이 같다면
    if make_num_list_add == i:
        # 답은 해당 i 값인 순간의 생성자로 교체
        ans = make_num
        break

print(ans)

모든 수를 탐색하여 생성자를 찾아줬다.

반응형

'study > 백준' 카테고리의 다른 글

[백준] 1789. 수들의 합 : python  (0) 2021.12.10
[백준] 1260. DFS와 BFS : python  (0) 2021.10.12
[백준] 10870. 피보나치 수 5 : python  (0) 2021.10.02
[백준] 10872. 팩토리얼  (0) 2021.09.27
[백준] 2839. 설탕 배달 : python  (0) 2021.09.25
반응형

https://www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.


def fibo(n):

    if n <= 1:
        return n
    else:
        return fibo(n-1) + fibo(n-2)


N = int(input())
print(fibo(N))

코드는 간단하지만 이해하는데는 조금 시간이 걸렸다

 

1. 일단 N 을 입력받은 후 fibo 함수에 입력받은 N 값을 넣어준다.

2. n이 1보다 작을 때(1혹은 0일 때)n을 출력해준다.

 

그럼 함수가 이런식으로 내려가며 1과 0을 return 하는데 이를 모두 더해주면 N이 7인 경우에는 13이 출력된다!

반응형

'study > 백준' 카테고리의 다른 글

[백준] 1260. DFS와 BFS : python  (0) 2021.10.12
[백준] 2231. 분해합 : python  (0) 2021.10.04
[백준] 10872. 팩토리얼  (0) 2021.09.27
[백준] 2839. 설탕 배달 : python  (0) 2021.09.25
[백준] 2775. 부녀회장이 될테야 : python  (0) 2021.09.24
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

swea D2 에서 D3로

백준 브론즈에서 실버로 가면서 점점... 알고리즘 한문제 한문제 시간이 오래 걸리기 시작함...

 


 

T = int(input())

for tc in range(1, T+1):
    text = input()
    t1 = []
    t2 = []
    flag = 1

    for i in text:

        if len(t1) == 0 :
            t1.append(i)
        elif i == t1[0]:
            t1.append(i)
        elif len(t2) == 0:
            t2.append(i)
        elif i == t2[0]:
            t2.append(i)
        else:
            flag = 0
        # print(t1)
        # print(t2)
    if len(t1) != 2 or len(t2) != 2:
        flag = 0
    if flag == 1:
        print('#{} Yes'.format(tc))
    else:
        print('#{} No'.format(tc))

t1, t2라는 이름을 가진 리스트를 2개 생성한 후

입력받은 text의 앞의 문자부터 하나씩 for문을 돌렸다

만약 t1리스트가 비어있다면 t1리스트에 입력이 되고

t1리스트에 어떤 문자가 있다면 그것과 i를 비교해서 같으면 넣고 다르다면 t2리스트로 이동,

t2리스트가 비어있다면 i를 넣고 t2리스트에 문자가 있다면 비교르 한다

그런식으로 for문 위에서 아래로 이동하며 체크 한 뒤 최종적으로 t1과 t2의 길이가 각각 2인경우 Yes출력!

나머지 경우 No를 출력한다!

반응형

+ Recent posts