[SWEA] D1 문제풀이 모음

EunBi Na·2022년 11월 14일
0

22.11.15 : 연월일 달력 (2056)

거꾸로 출력해 보아요 (1545)

주어진 숫자부터 0까지 순서대로 찍어보세요
아래는 입력된 숫자가 N일 때 거꾸로 출력하는 예시입니다

N N-1 N-2 ... 0

num = int(input())

for i in range(num, -1, -1):
    print(i, end=' ')

간단한 N의 약수 (1933)

입력으로 1개의 정수 N 이 주어진다.
정수 N 의 약수를 오름차순으로 출력하는 프로그램을 작성하라.

[제약사항]
N은 1이상 1,000이하의 정수이다. (1 ≤ N ≤ 1,000)

[입력]
입력으로 정수 N 이 주어진다.

[출력]
정수 N 의 모든 약수를 오름차순으로 출력한다.

n = int(input())

for i in range(1, n + 1):
    if n % i == 0:
        print(i, end=' ')

1대1 가위바위보 (1936)

A와 B가 가위바위보를 하였다.
가위는 1, 바위는 2, 보는 3으로 표현되며 A와 B가 무엇을 냈는지 입력으로 주어진다.
A와 B중에 누가 이겼는지 판별해보자. 단, 비기는 경우는 없다.

[입력]
입력으로 A와 B가 무엇을 냈는지 빈 칸을 사이로 주어진다.

[출력]
A가 이기면 A, B가 이기면 B를 출력한다.

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

if (a == 1 and b == 2) or (a == 1 and b == 3) or (a == 2 and b == 3):
	print("A")
else:
	print("B")

아주 간단한 계산기 (1938)

두 개의 자연수를 입력받아 사칙연산을 수행하는 프로그램을 작성하라.

[제약 사항]
1. 두 개의 자연수 a, b는 1부터 9까지의 자연수이다. (1 ≤ a, b ≤ 9)
2. 사칙연산 + , - , * , / 순서로 연산한 결과를 출력한다.
3. 나누기 연산의 결과에서 소수점 이하의 숫자는 버린다.

[입력]
입력으로 두 개의 자연수 a, b가 빈 칸을 두고 주어진다.

[출력]
사칙연산의 결과를 각 줄에 순서대로 출력한다.

a, b = map(int, input().split())
print(a + b)
print(a - b)
print(a * b)
print(a // b)

더블더블 (2019)

1부터 주어진 횟수까지 2를 곱한 값(들)을 출력하시오.
주어질 숫자는 30을 넘지 않는다.

n = int(input())

for i in range(n + 1):
    print(pow(2, i), end=' ')

N줄덧셈 (2025)

1부터 주어진 숫자만큼 모두 더한 값을 출력하시오.
단, 주어질 숫자는 10000을 넘지 않는다.

[예제]
주어진 숫자가 10 일 경우 출력해야 할 정답은,
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

n = int(input())
print(sum(list(range(1, n + 1))))

대각선 출력하기 (2027)

주어진 텍스트를 그대로 출력하세요.
#++++
+#+++
++#++
+++#+
++++#

for i in range(5):
    for j in range(5):
        if i == j:
            print('#', end='')
        else:
            print('+', end='')
    print()

몫과 나머지 출력하기 (2029)

2개의 수 a, b를 입력 받아, a를 b로 나눈 몫과 나머지를 출력하는 프로그램을 작성하라.

[제약 사항]
각 수는 1이상 10000이하의 정수이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 2개의 수가 주어진다.

[출력]
출력의 각 줄은 '#t'로 시작하고 공백을 한 칸 둔 다음, 몫을 출력하고 공백을 한 칸 둔 다음 나머지를 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

T = int(input())

for test_case in range(1, T + 1):
    a, b = map(int, input().split())
    print(f'#{test_case} {a // b} {a % b}')

서랍의 비밀번호 (2043)

서랍의 비밀번호가 생각이 나지 않는다.
비밀번호 P는 000부터 999까지 번호 중의 하나이다.
주어지는 번호 K부터 1씩 증가하며 비밀번호를 확인해 볼 생각이다.

예를 들어 비밀번호 P가 123 이고 주어지는 번호 K가 100 일 때, 100부터 123까지 24번 확인하여 비밀번호를 맞출 수 있다.

P와 K가 주어지면 K부터 시작하여 몇 번 만에 P를 맞출 수 있는지 알아보자.

[입력]
입력으로 P와 K가 빈 칸을 사이로 주어진다.

[출력]
몇 번 만에 비밀번호를 맞출 수 있는지 출력한다.

password, key = map(int, input().split())
print(password - key + 1)

스탬프 찍기 (2046)

주어진 숫자만큼 # 을 출력해보세요.
주어질 숫자는 100,000 이하다.

n = int(input())
print('#' * n)

신문 헤드라인 (2047)

신문의 헤드라인을 편집하기 위해, 주어지는 문자열의 알파벳 소문자를 모두 대문자로 바꾸는 프로그램을 개발 중이다.
입력으로 주어진 문장에 모든 소문자 알파벳을 찾아 대문자로 변환한 다음, 그 결과를 출력하는 프로그램을 작성하라.

[예제 풀이]
The_headline_is_the_text_indicating_the_nature_of_the_article_below_it.
위와 같은 문자열이 입력으로 주어졌을 때, 출력은 다음과 같다.
THE_HEADLINE_IS_THE_TEXT_INDICATING_THE_NATURE_OF_THE_ARTICLE_BELOW_IT.

[제약 사항]
문자열의 최대 길이는 80 bytes 이다.

[입력]
입력으로 80 bytes 이하의 길이를 가진 문자열이 주어진다.

[출력]
문자열의 소문자를 모두 대문자로 변경한 결과를 출력한다.

s = input().strip().upper()
print(s)

알파벳을 숫자로 변환 (2050)

알파벳으로 이루어진 문자열을 입력 받아 각 알파벳을 1부터 26까지의 숫자로 변환하여 출력하라.

[제약 사항]
문자열의 최대 길이는 200이다.

[입력]
알파벳으로 이루어진 문자열이 주어진다.

[출력]
각 알파벳을 숫자로 변환한 결과값을 빈 칸을 두고 출력한다.

s = input().strip()
for i in s:
    print(ord(i) - 64, end=' ')

연월일 달력 (2056)

연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.

해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면
[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,
날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.

연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며
일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.

※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)

[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.

[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

calendar = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

T = int(input())
for test_case in range(1, T + 1):
    data = input().strip()
    year = data[:4].zfill(4)
    month = data[4:6].zfill(2)
    day = data[6:].zfill(2)
    answer = '-1'

    if (int(year) * int(month) * int(day) == 0) or int(day) > calendar[int(month)]:
        print(f'#{test_case} {answer}')
    else:
        answer = [year, month, day]
        print(f'#{test_case} {"/".join(answer)}')

zfill(width): 길이가 width인 문자열을 만들기 위해 ASCII '0' 문자를 왼쪽에 채운 문자열의 복사본을 돌려준다.

자릿수 더하기 (2058)

하나의 자연수를 입력 받아 각 자릿수의 합을 계산하는 프로그램을 작성하라.

[제약 사항]
자연수 N은 1부터 9999까지의 자연수이다. (1 ≤ N ≤ 9999)

[입력]
입력으로 자연수 N이 주어진다.

[출력]
각 자릿수의 합을 출력한다.

n = list(input().strip())
print(sum(map(int, n)))

중간값 찾기 (2063)

중간값은 통계 집단의 수치를 크기 순으로 배열 했을 때 전체의 중앙에 위치하는 수치를 뜻한다.
입력으로 N 개의 점수가 주어졌을 때, 중간값을 출력하라.

[예제]
N이 9 이고, 9개의 점수가 아래와 같이 주어질 경우,
85 72 38 80 69 65 68 96 22
69이 중간값이 된다.

[제약 사항]
1. N은 항상 홀수로 주어진다.
2. N은 9이상 199 이하의 정수이다. (9 ≤ N ≤ 199)

[입력]
입력은 첫 줄에 N 이 주어진다.
둘째 줄에 N 개의 점수가 주어진다.

[출력]
N 개의 점수들 중, 중간값에 해당하는 점수를 정답으로 출력한다.

n = int(input())
numbers = list(map(int, input().split()))
numbers.sort()
print(numbers[n // 2])

최대수 구하기 (2068)

10개의 수를 입력 받아, 그 중에서 가장 큰 수를 출력하는 프로그램을 작성하라.

[제약 사항]
각 수는 0 이상 10000 이하의 정수이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 10개의 수가 주어진다.

[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

T = int(input())

for test_case in range(1, T + 1):
    numbers = list(map(int, input().split()))
    print(f'#{test_case} {max(numbers)}')

큰 놈, 작은 놈, 같은 놈 (2070)

2개의 수를 입력 받아 크기를 비교하여 등호 또는 부등호를 출력하는 프로그램을 작성하라.

[제약 사항]
각 수는 0 이상 10000 이하의 정수이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 2개의 수가 주어진다.

[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

T = int(input())

for test_case in range(1, T + 1):
    a, b = map(int, input().split())
    answer = ''

	if a > b:
        answer += '>'
    elif a == b:
        answer += '='
    else:
        answer += '<'
    print(f'#{test_case} {answer}')

평균값 구하기 (2071)

10개의 수를 입력 받아, 평균값을 출력하는 프로그램을 작성하라.
(소수점 첫째 자리에서 반올림한 정수를 출력한다.)

[제약 사항]
각 수는 0 이상 10000 이하의 정수이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 10개의 수가 주어진다.

[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

T = int(input())

for test_case in range(1, T + 1):
    numbers = list(map(int, input().split()))
    print(f'#{test_case} {round(sum(numbers) / 10)}')

홀수만 더하기 (2072)

10개의 수를 입력 받아, 그 중에서 홀수만 더한 값을 출력하는 프로그램을 작성하라.

[제약 사항]
각 수는 0 이상 10000 이하의 정수이다.

[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 10개의 수가 주어진다.

[출력]
출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

T = int(input())

for test_case in range(1, T + 1):
    numbers = list(map(int, input().split()))
    total = 0

	for num in numbers:
        if num % 2 != 0:
            total += num
    print(f'#{test_case} {total}')
profile
This is a velog that freely records the process I learn.

0개의 댓글