BOJ 50

[BOJ] 2920 - 음계

문제 https://www.acmicpc.net/problem/2920 다장조는 c d e f g a b C의 8 음계로 구성되어 있다. c는 1로, d는 2로, ..., C를 8로 변환한다고 했을 때 1부터 8까지 차례대로 연주하면 ascending을, 8부터 1까지 차례대로 연주하면 descending, 두 경우에 해당하지 않으면 mixed라고 하자. 연주한 순서를 입력받아, 해당 연주의 ascending/descending/mixed 여부를 판단하라. 풀이 내 풀이 1. 입력받은 값을 리스트에 저장한다. 2. mixed 여부를 확인하기 위한 플래그 변수를 False로 초기화한다. 3. 리스트의 처음 값과 그 다음 값을 비교하여, ascending으로 시작하는지 descending으로 시작하는지 확인..

Algorithm/백준 2022.02.03

[BOJ] 10820 - 문자열 분석

문제 https://www.acmicpc.net/problem/10820 임의의 개수의 문자열을 입력받아, 문자열에 포함된 소문자, 대문자, 숫자, 공백의 개수를 구하여라. 내 풀이 체크할 것과 그 개수를 key, value로 하는 딕셔너리를 사용했다. 문자열 입력을 시도한 후 입력이 있으면 소문자, 대문자, 숫자, 공백의 개수를 확인하고, 입력이 없으면 프로그램을 종료한다. 숫자는 형변환 시도 시 에러 여부 발생으로 확인했다. import sys while True: d = {"lower": 0, "upper": 0, "number": 0, "space": 0} try: s = input() for t in s: if t == " ": # 공백 d["space"] += 1 else: try: # 숫자 ..

Algorithm/백준 2022.01.31

[BOJ] 10101 - 삼각형 외우기

문제 https://www.acmicpc.net/problem/10101 삼각형의 세 각을 입력받아, 아래와 같이 조건에 따라 정해진 문자열을 출력하라. 세 각의 크기가 모두 60인 경우 : Equilateral 세 각의 합이 180이고 두 각이 같은 경우 : Isosceles 세 각의 합이 180이고 같은 각이 없는 경우 : Scalene 세 각의 합이 180이 아닌 경우 : Error 풀이 조건문만 다룰 줄 안다면 해결할 수 있는 간단한 문제다. 이 글에서는 조건문을 이용한 방법 외에도 다른 방법으로 해결한 코드도 함께 정리한다. 1. 조건문 이용 세 개의 숫자에서 같은 값이 있는지를 따져볼 때에는, 정렬한 숫자 목록의 중간값에 해당하는 값(가운데에 위치한 숫자)이 몇 개인지 확인하면 판단할 수 있다..

Algorithm/백준 2022.01.27

[BOJ] 10808 - 알파벳 개수

문제 https://www.acmicpc.net/problem/10808 알파벳 소문자로만 이루어진 단어 s를 입력받아, 단어의 각 알파벳의 개수를 구하여라. 풀이 내 풀이 리스트 컴프리헨션과 count 함수를 이용해 각 알파벳의 개수를 저장한 리스트를 구하고, 그 리스트 내용을 공백으로 값을 구분하여 출력한다. 리스트에 저장할 때 데이터형을 문자열로 저장하여 형변환하는 점을 회피했다. import sys s = sys.stdin.readline() print(" ".join([f"{s.count(chr(i))}" for i in range(ord("a"), ord("z") + 1)])) 다른 사람 풀이 아래와 같이 map 함수를 이용해 해결할 수도 있다. import sys print(*map(sys...

Algorithm/백준 2022.01.21

[BOJ] 4375 - 1

문제 https://www.acmicpc.net/problem/4375 2와 5로 나누어 떨어지지 않는 정수 n을 입력받아, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하라. 출력은 n의 배수 중 가장 작은 자리수를 출력한다. 풀이 1로 이루어진 숫자가 n으로 나누어 떨어지는지 찾으면 된다. 방법은 아래와 같다. 1. n을 입력받는다. (반복) 2. 1로 이루어진 숫자가 n으로 나누어떨어질 때까지 숫자를 증가시킨다. 3. 1로 이루어진 숫자가 n으로 나누어떨어지면 숫자의 길이를 출력한다. 코드 import sys for n in sys.stdin: # n 입력 if n == '\n': exit() # 입력 종료 num = 1 # 1로 이루어진 숫자 while True: if num % int(n) ..

Algorithm/백준 2022.01.19

[BOJ] 2839 - 설탕 배달

문제 https://www.acmicpc.net/problem/2839 설탕 공장에서 사탕 가게로 설탕을 배달하는 상근이는 정확하게 nkg를 배달해야 한다. 설탕은 3kg, 5kg 용량의 봉지에 담겨지는데, 최대한 적은 수의 봉지로 배달하고자 한다. 배달해야 하는 설탕 무게를 입력 받아 배달할 봉지의 수를 구하는 프로그램을 작성하라. 두 종류의 봉지로 배달해야 하는 설탕 무게를 만들 수 없다면 -1을 출력하라. 입력과 출력은 다음과 같다. 설탕 무게 봉지 수 18 4 5 * 3 + 3 * 1 4 -1 6 2 5 * 0 + 3 * 2 9 3 5 * 0 + 3 * 3 11 3 5 * 1 + 3 * 2 풀이 남아있는 설탕의 무게가 5의 배수인 경우, 현재 봉지의 수에서 5kg 봉지의 수를 더한 수가 최소 배달..

Algorithm/백준 2022.01.13

[BOJ] 1292 - 쉽게 푸는 문제

문제 https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 1이 한 번, 2이 두 번, 3이 세 번… 그리고 n이 n번 등장하는 수열(1 2 2 3 3 3 4 4 4 4 5…)을 만들고, 특정 구간의 합을 구하는 계산한다. 구간의 시작과 끝을 나타내는 정수 A, B (1 ≤ A ≤ B ≤ 1,000)를 입력으로 받는다. 풀이 수열의 최대 길이가 1000이므로 수열을 직접 구현한 뒤 합을 구한다. 코드 import sys # 수열 구현 ss = [] i = 1 while l..

Algorithm/백준 2022.01.04

[BOJ] 5576 - 콘테스트 / 리스트 컴프리헨션 이차배열

문제 https://www.acmicpc.net/problem/5576 프로그래밍 콘테스트에 W대학과 K대학이 참가한다. 두 대학 모두 10명씩 참가하며, 점수가 가장 높은 3명의 점수를 합해 대학의 점수로 계산한다. W대학의 점수, K대학의 점수를 나타내는 20줄의 입력을 받아 각 대학의 점수를 공백으로 구분하여 출력하는 프로그램을 작성한다. 풀이 1. 각 입력을 10열 2행의 배열로 저장한다. 2. 각 행을 정렬한 뒤 마지막 3개 값을 합한 결과를 출력한다. 소스 코드 import sys s = [[int(sys.stdin.readline()) for _ in range(10)] for _ in range(2)] print(sum(sorted(s[0])[7:]), sum(sorted(s[1])[7:]..

Algorithm/백준 2021.12.30

[BOJ] 2592 - 대표값

문제 https://www.acmicpc.net/problem/2592 열 개의 자연수가 주어질 때 이들의 평균값과, 가장 많이 나타나는 최빈값을 구하은 프로그램을 작성하라 첫째 줄에는 평균을, 둘째 줄에는 최빈값을 출력한다. 최빈값이 둘 이상인 경우에는 그중 하나만을 출력한다. 풀이 1. 열 개의 자연수를 입력받아 배열로 저장한다. 2. 배열 내 값을 키로, 그 값의 개수를 값으로 하는 딕셔너리를 생성한다. 3. 딕셔너리의 키 배열에서, 그 키의 값과 딕셔너리의 값 배열의 최대값이 같으면 해당 키가 최빈값이다. 내 코드 import sys l = [] for i in range(10): l.append(int(sys.stdin.readline())) freq = {x: l.count(x) for x i..

Algorithm/백준 2021.12.24

[BOJ] 11718 - 그대로 출력하기

문제 https://www.acmicpc.net/problem/11718 입력 받은 문자열을 그대로 출력하는 프로그램을 작성하라. 입력은 최대 100줄이며, 한 줄은 알파뱃, 숫자, 공백으로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또한 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다. 풀이 임의의 여러 줄을 입력받아 처리하는 문제이다. 내 풀이 빈 줄이 주어지지 않는다는 점을 이용하여 입력이 공백인 경우, 입력의 끝이라고 간주한다. import sys while True: i = sys.stdin.readline()[:-1] # 개행문자('\n') 제거 if i == "": exit() print(i) 다른 풀이 예외 처리를 이용한다. import sys..

Algorithm/백준 2021.12.20
1 2 3 4 5