반응형

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

 

10817번: 세 수

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

www.acmicpc.net

문제

세 정수 A, B, C가 주어진다. 이때, 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오. 

입력

첫째 줄에 세 정수 A, B, C가 공백으로 구분되어 주어진다. (1 ≤ A, B, C ≤ 100)

출력

두 번째로 큰 정수를 출력한다.


풀이

.sort()를 사용하여 배열을 크기순으로 정렬할 계획이라

a,b,c를 각각 받지 않고 list로 받아줬다.

코드

#10817 세수
numlist = list(map(int,input().split()))
numlist.sort()
print(numlist[1])
반응형

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

[백준] 1000. A + B : C++  (0) 2022.01.17
[백준] 10172.개 : C++  (0) 2022.01.17
[백준] 10171. 고양이 : C++  (0) 2022.01.07
[백준] 1977. 완전제곱수 : C++  (0) 2021.12.31
[백준] 2530. 인공지능 시계 : python  (0) 2021.12.19
반응형

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

 

10171번: 고양이

아래 예제와 같이 고양이를 출력하시오.

www.acmicpc.net

문제

아래 예제와 같이 고양이를 출력하시오.

입력

없음.

출력

고양이를 출력한다.


접근방법

이스케이프 시퀀스를 이용한다

백슬래시를 입력하고 싶은 경우 \\ << 이렇게 백슬래시 뒤에 \를 입력해준다

이게 지금은... 원 표시로 보이는데 코드 작성할땐 백슬래시임...

 

\n 대신에 << endl 를 사용해줘도 될 것 같지만 \n을 사용해서 풀었다

코드

#include<iostream>
using namespace std;

int main()
{
	cout << "\\    /\\\n";
	cout << " )  ( ')\n";
	cout << "(  /  )\n";
	cout << " \\(__)|\n";
}

 

반응형

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

[백준] 10172.개 : C++  (0) 2022.01.17
[백준] 10817. 세 수 : python  (0) 2022.01.17
[백준] 1977. 완전제곱수 : C++  (0) 2021.12.31
[백준] 2530. 인공지능 시계 : python  (0) 2021.12.19
[백준] 2525. 오븐 시계 : python  (0) 2021.12.19
반응형

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

 

1977번: 완전제곱수

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완

www.acmicpc.net

문제

M과 N이 주어질 때 M이상 N이하의 자연수 중 완전제곱수인 것을 모두 골라 그 합을 구하고 그 중 최솟값을 찾는 프로그램을 작성하시오. 예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 완전제곱수는 64, 81, 100 이렇게 총 3개가 있으므로 그 합은 245가 되고 이 중 최솟값은 64가 된다.

입력

첫째 줄에 M이, 둘째 줄에 N이 주어진다. M과 N은 10000이하의 자연수이며 M은 N보다 같거나 작다.

출력

M이상 N이하의 자연수 중 완전제곱수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 완전제곱수가 없을 경우는 첫째 줄에 -1을 출력한다.


 C++ 코드

#include <iostream>

int main()
{
    int M, N;
    
    std::cin >> M;
    std::cin >> N;

    int i = 1;
    int sum = 0;
    int min = 789456123;
    while (true) {
        int ans = 0;
        ans = i * i;
        if (ans >= M && ans <= N) {
            sum += ans;
            if (ans < min) {
                min = ans;
            }
        }
        else if (ans > N) {
            break;
        }
        i++;
    }
    if (sum <= 0) {
        std::cout << -1;
    }
    else {
        std::cout << sum << "\n" << min;
    }
}

풀이

완전제곱수 = i * i

i가 하나씩 커지면서 만들 수 있는 모든 완전제곱수를 만든다.

만들어진 완전제곱수의 범위가 주어진 범위내일 경우 sum에 값을 더하고 초과하면 while문을 나온다

만약 sum 이 0 일경우 -1 값이 없으므로 -1 출력한다

반응형
반응형

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

 

2530번: 인공지능 시계

첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0

www.acmicpc.net

문제

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 초 단위로 자동적으로 계산한다.

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.  

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 초 단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

입력

첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23), 분 B (0 ≤ B ≤ 59)와 초 C (0 ≤ C ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 D (0 ≤ D ≤ 500,000)가 초 단위로 주어진다.

출력

첫째 줄에 종료되는 시각의 시, 분, 초을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수이며, 분, 초는 0부터 59까지의 정수이다. 디지털 시계는 23시 59분 59초에서 1초가 지나면 0시 0분 0초가 된다.)


# 2530 인공지능 시계

A, B, C = map(int,input().split())
D = int(input())

C += D % 60
if C >= 60:
    C -= 60
    B += 1

B += (D // 60) % 60
if B >= 60:
    B -= 60
    A += 1

A += ((D // 60) // 60) % 24
if A >= 24:
    A -= 24

print('{} {} {}'.format(A,B,C))

2021.12.19 - [study/백준] - [백준] 2525. 오븐 시계 : python

 

[백준] 2525. 오븐 시계 : python

https://www.acmicpc.net/problem/2525 2525번: 오븐 시계 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23

w-world.tistory.com

시간 / 분

시간 / 분 / 초를 다룬다는 점에서 다르지만 매우 유사한 문제

반응형

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

[백준] 10171. 고양이 : C++  (0) 2022.01.07
[백준] 1977. 완전제곱수 : C++  (0) 2021.12.31
[백준] 2525. 오븐 시계 : python  (0) 2021.12.19
[백준] 9506. 약수들의 합 : python  (0) 2021.12.13
[백준] 1789. 수들의 합 : python  (0) 2021.12.10
반응형

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

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

문제

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다. 

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

입력

첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다. 

출력

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)


# 2525 오븐 시계

hour, min = map(int,input().split())
C = int(input())

min += C % 60

hour += C // 60

if min == 60:
    min = 0
    hour += 1
if min >= 60:
    min -= 60
    hour += 1
if hour >= 24:
    hour -= 24

print('{} {}'.format(hour, min))

60 / 24 진법을 잘 이용해서 풀기

비슷한 문제

2021.12.19 - [study/백준] - [백준] 2530. 인공지능 시계 : python

 

반응형
반응형

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

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.  예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

문제

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

입력

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000)

입력의 마지막엔 -1이 주어진다.

출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

 


풀이

1. 1~n-1의 숫자로 나눠서 나머지가 0이면 약수로 저장하기

2. 해당 약수를 출력하기

# 9506 약수들의 합

# 숫자를 계속 입력받기
while True:
    n = int(input())
    # -1을 받으면 while문 종료
    if n == -1:
        break
    
    ans = []
    add = 0
    # 나누어지면 약수로 배열에 넣어주기
    # 자동 오름차순
    for i in range(1, n):
        if n % i == 0:
            ans.append(i)

    for i in range(len(ans)):
        add += ans[i]

    if add != n:
        print('{} is NOT perfect.'.format(n))
    else:
        print('{} ='.format(n),end=' ')
        for i in range(len(ans)):
            # 마지막 숫자의 뒤에는 + 를 빼주기
            if i == len(ans)-1:
                print('{}'.format(ans[i]))
            else:
                print('{} +'.format(ans[i]), end=' ')

엄청 어려운 문제는 아니지만 -1이 마지막에 주어진다는걸 못봐서

입력을 하나하나 받다가 틀렸던 문제.

반응형
반응형

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

 

1789번: 수들의 합

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

www.acmicpc.net

문제

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

입력

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

출력

첫째 줄에 자연수 N의 최댓값을 출력한다.


 

S = int(input())
num = 1
ans = 0

while ans <= S:
    ans += num
    if ans >= S-num:
        break
    # print('num : {}, ans : {}'.format(num,ans))
    num += 1
print(num)

풀이

1. 모두 다른 수 이므로 더해지는 서로 다른 N을 1부터 +1

2. 마지막에 수를 더할 경우 S를 초과하게 되므로 마지막 수는 빼기

반응형
반응형

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

문제

그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.

입력

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

출력

첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.


def DFS(v):
    global visited
    # 들어온 수를 방문체크 해준다
    visited[v] = 1
    # 현재 탐색하는 수를 출력한다
    print(v, end=' ')
    # 연결된 다른 노드 확인
    for i in range(len(arr[v])):
        # 해당 노드가 연결되어있고,
        if arr[v][i] == 1:
            # 방문체크가 되어있지 않다면
            if visited[i] == 0:
                # 해당 노드로 이동
                DFS(i)

def BFS(v):
    global visited
    # queue를 만들어준다
    Q = [v]
    # 방문 체크
    visited[v] = 1
    # queue에 값이 존재하는 동안 반복
    while Q:
        # 현재 탐색하는 수는 Q리스트 안의 가장 앞의 값
        v = Q.pop(0)
        print(v, end=' ')
        for i in range(1, N+1):
            # 방문체크가 안되어있고 현재 탐색중인 노드와 연결되어 있다면
            if visited[i] == 0 and arr[v][i] == 1:
                # Q리스트에 넣어준다
                Q.append(i)
                # 방문 체크
                visited[i] = 1

N, M, V = map(int,input().split())
arr = [[0]*(N+1) for _ in range(N+1)]
visited = [0]*(N+1)

for num in range(M):
    st, ed = map(int, input().split())
    # '양방향'이기 때문에 두가지 경우를 모두 연결시킨다.
    arr[st][ed] = 1 # 단방향일 경우 이 코드만 써도 된다
    arr[ed][st] = 1
DFS(V)
print()
visited = [0]*(N+1)
BFS(V)

 

반응형

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

[백준] 9506. 약수들의 합 : python  (0) 2021.12.13
[백준] 1789. 수들의 합 : python  (0) 2021.12.10
[백준] 2231. 분해합 : python  (0) 2021.10.04
[백준] 10870. 피보나치 수 5 : python  (0) 2021.10.02
[백준] 10872. 팩토리얼  (0) 2021.09.27
반응형

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

+ Recent posts