2017. 08. 08 알고리즘 정리(백준 저지)

2018. 8. 9. 00:53Programming/Algorithm

문제 1924번 - 2007년

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

문제

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력

첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력

첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

소스코드

month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

day = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']

a, b = input().split(' ')
a = int(a)
b = int(b)
date = 0

for i in range(1, a):
    date += month[i-1] #i-1에 주의. 처음에 i로 썼다가 틀렸음.

date += b-1

print(day[date%7])

문제 2439 - 별 찍기 2

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

문제

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별 (예제 참고)을 출력하시오.

입력

첫째 줄에 N (1<=N<=100)이 주어진다.

출력

첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

소스코드

num = int(input())

for i in range(1, num+1):
    print(' '*(num-i)+'*'*i) #컴마(,)를 쓰지말고 +를 써야한다. 공백이 생기므로.

문제 2445 - 별 찍기 8

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

문제

예제를 보고 별찍는 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N (1<=N<=100)이 주어진다.

출력

첫째 줄부터 2*N-1번째 줄 까지 차례대로 별을 출력한다.

소스코드

num = int(input())

for i in range(1, num):
    print('*'*i + ' '*(2*(num-i)) + '*'*i)
print('*'*(2*num))
for i in range(1, num):
    print('*'*(num-i) + ' '*(2*i) + '*'*(num-i))
    #가운데 줄의 별 모양이 짝수였다. 처음에 잘못봐서 실수함

문제 10991 - 별 찍기 16

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

문제

예제를 보고 별 찍는 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N (1<=N<=100)이 주어진다.

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

소스코드

num = int(input())

for i in range(1, num+1):
    line = ' '.join('*'*i)
    print(' '*(num-i)+line)

문제 10818 - 최소, 최대

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

문제

N개의 정수가 주어진다. 이 때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력

첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

소스코드

num = int(input())
line = list(map(int, input().split()))

print(max(line), min(line))

문제 10951 - A+B 4

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

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 A+B를 출력한다.

소스코드

while True:
    try:
        a, b = map(int, input().split())
        print(a+b)
    except:
        break
        #파이썬에서 EOF 개념을 쓰는게 생소해서 당황했던 문제다. try를 써도 통과는 되고, 정석적인 방법을 쓰려면 import sys를 해야한다. 그 방법은 아래 문제에 서술

문제 11719 - 그대로 출력하기 2

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

문제

입력 받은 대로 출력하는 프로그램을 작성하시오.

입력

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄이 주어질 수도 있고, 각 줄의 앞 뒤에 공백이 있을 수도 있다.

출력

입력받은 그대로 출력한다.

소스코드

import sys

p = sys.stdin.read()

sys.stdout.write(p) #sys를 이용해서 푸는 방법. 그냥 print(input()) 해도 된다.