python/연습문제 풀이

[백준] Python 2558 / 3046 / 2163 / 11021 / 11022 / 10699 / 7287 / 2525 / 2530

연정양 2023. 1. 26.

 

2558 (A+B -2) 

 

2558번: A+B - 2

첫째 줄에 A, 둘째 줄에 B가 주어진다. (0 < A, B < 10)

www.acmicpc.net

A = int(input())
B = int(input())
print(A+B)

 

 

 

3046 (R2)

 

3046번: R2

두 숫자 R1과 R2가 있을 때, 두 수의 평균 S는 (R1+R2)/2와 같다. 상근이는 정인이 생일 선물로 두 숫자 R1과 R2를 주려고 한다. 생일 파티에서 상근이는 정인이에게 이 두 숫자를 말해주고, 정인이는

www.acmicpc.net

R1, S = map(int,input().split())
if (-1000 <= R1 and R1 <= 1000) and (-1000 <= S and S <= 1000):
    R2 = -R1 + (2 * S)
    print(R2)

A+B/2 = C 를 응용한 풀이

 

 

2163 (초콜릿 자르기)

 

2163번: 초콜릿 자르기

정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다. 초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿

www.acmicpc.net

N, M = map(int,input().split())
if 1 <= N and M <= 300:
    min_break = (N * M) - 1
    print(min_break)

 

 

11021 (A+B-7)

 

11021번: A+B - 7

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

www.acmicpc.net

T = int(input())
for i in range(T):
    A, B = map(int,input().split())
    C = A+B
    print("Case #",i + 1,": ",C,sep="")

print 부분만 신경쓰면 간단하게 풀 수 있다. i (index)는 0부터 시작하는 것을 잊지 않기 . .

 

 

11022 (A+B-8)

 

11022번: A+B - 8

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

www.acmicpc.net

T = int(input())
a_list = []
b_list = []
for i in range(T):
    A, B = map(int,input().split())
    a_list.append(A)
    b_list.append(B)
    C = A + B
    print("Case #",i + 1,": ", a_list[i], " + ", b_list[i]," = ",C,sep="")

바로 위 문제의 응용 버전

map으로 한 번에 받은 값을 인덱스로 하나씩 꺼내려면 list를 생성해야 한다.

 

 

10699 (오늘 날짜)

 

10699번: 오늘 날짜

서울의 오늘 날짜를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

import datetime
todaydate1 = datetime.datetime.now()
print(str(todaydate1)[:10])

이 방법은 처음 알았다! 날짜 형식을 str로 변환해서 인덱싱하면 형식이 자동 지정되어 출력된다.

처음에는 

from datetime import datetime
from pytz import timezone
print(datetime.now(timezone('Asia/Seoul')).strftime('%Y-%m-%d'))

이렇게 했는데 기본 내장 패키지인 datetime 외에 timezone을 사용해서 런타임 에러가 났다. 

위 방법도 pycharm 에서는 돌아간다.

 

 

7287 (등록)

 

7287번: 등록

첫 줄에 자신이 맞은 문제의 수, 둘째 줄에 아이디를 출력한다.

www.acmicpc.net

print("32\nuserid")

*userid는 임의로 넣은 것

한참 고민하면서 크롤링을 해야하나 ..? 했는데 그냥 마이페이지에 뜨는 정보를 출력하면 되는 거였다.

내 아이디 넣기 귀찮아서 예시 넣었다가 틀렸다 ㅋ 그나저나 아직 32문제 밖에 못 맞췄다니 . . 분발 . .

 

 

2525 (오븐시계)

 

2525번: 오븐 시계

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

www.acmicpc.net

A, B = map(int,input().split())
C = int(input())
if (0 <= A and A <= 23) and (0 <= B and B <= 59):
    D = B + C
    if D // 60 >= 1:
        E = D // 60
        A = A + E
        D = D - (60 * E)
        if A // 24 >= 1:
            F = A // 24
            A = A - (24 * F)
    print(A,D)

예전에 못 풀었던 문제 해결 !!!

60분과 24시간보다 초과하는 걸 어떻게 해결하느냐가 관건인데,

60분일때 1을 추가하는 방법이라면 % 로도 해결이 가능하지만

120분이나 234분 처럼 1이상을 추가해야 할 때도 있기 때문이다. 

몫을 이용하는 방법으로 해결했다. 

분 -> 시간 순으로 해결해야 올바르게 계산할 수 있다

 

 

2530 (인공지능 시계)

 

2530번: 인공지능 시계

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

www.acmicpc.net

A, B, C = map(int,input().split())
D = int(input())
if (0 <= A and A <= 23) and (0 <= B and B <= 59) and (0 <= C and C <= 59):
    E = C + D #초
    if E // 60 >= 1:
        F = E // 60 #나머지
        B = B + F #분 -> 분 + 나머지
        E = E - (60 * F) #초
        if B // 60 >= 1: #분
            G = B // 60
            A = A + G #시간
            B = B - (60 * G)
            if A // 24 >= 1:
                H = A // 24
                A = A - (24 * H)
    print(A,B,E)

오븐 시계 응용 문젠데

헷갈려서 코멘트 달아가며 풀었다.

초 -> 분 -> 시간 순서!

위 문제만 이해하면 쉽게 풀 수 있다 

시간이 좀 오래 걸려서 좀 더 빠른 방법을 찾아봐야겠다. 

 

 

 

 

댓글