Algorithm/백준 45

[BOJ] 1100 - 하얀 칸

문제 https://www.acmicpc.net/problem/1100 8 * 8 크기의 검정 칸과 하얀 칸이 번갈아가며 칠해진 체스판이 있다. 가장 왼쪽 위칸 (0, 0)이 하얀 칸이라고 할 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램을 작성하라. 말이 없는 칸은 "."로 표기하고, 말이 있는 칸은 "F"로 표기한다. .F.F...F F...F.F. ...F.F.F F.F...F. .F...F.. F...F.F. .F.F.F.F ..FF..F. 풀이 내 풀이 1. 체스판의 상태를 문자열 배열로 입력받는다. 2. 체스판을 탐색하며, 하얀 칸이면서(행과 열이 짝수이거나 행과 열이 홀수) 말이 있을 때 말의 개수를 1씩 증가시킨다. 3. 최종 확인된 말의 개수를 출력한다. 코드 import sy..

Algorithm/백준 2022.04.03

[BOJ] 5575번 - 타임 카드

문제 https://www.acmicpc.net/problem/5575 5575번: 타임 카드 JOI 상사는 직원의 근무시간을 타임 카드로 관리하고있다. 직원들은 전용 장비를 사용하여 타임 카드에 출근 시간을 기록한다. 근무를 마치고 퇴근할 때도 타임 카드에 퇴근 시간을 기록한다. www.acmicpc.net 직원의 출퇴근 시간을 관리하기 위해 타임카드를 사용한다. 타임카드에 출근 시간과 퇴근 시간을 기록하며, 24시간 제를 사용한다. 직원은 7시 이후에 출근하며 23시 이전에 퇴근한다. 퇴근 시간은 출근 시간보다 늦다. 직원 A, B, C의 출근 시간과 퇴근 시간이 주어졌을 때 각 지원의 근무시간을 계산하라. 풀이 내 풀이 1. 직원의 출퇴근 시각을 입력받는다. 2. datetime 모듈의 strpti..

Algorithm/백준 2022.03.25

[BOJ] 3049 - 다각형의 대각선

문제 https://www.acmicpc.net/problem/3049 모든 내부각의 180°보다 작은 다각형을 볼록 다각형이라고 한다. 세 대각선이 한 점에서 만나지 않는 볼록 N각형이 주어졌을 때, 대각선의 교차점의 개수를 세어라. 풀이 조합 공식을 활용하면 간단하게 문제를 해결할 수 있다. 하나의 교차점이 생기기 위해서는 4개의 꼭짓점을 선택해야 한다. 그 경우의 수를 조합 공식으로 나타내면 \(_{n}\mathrm{C}_{4}\)에 해당한다. 이것을 정리하며 아래와 같다. $$ \begin{matrix} _{n}\mathrm{C}_{4} &=& {n! \over 4!(n-4)!} \\ &=& {n(n-1)(n-2)(n-3)(n-4)(n-5)\cdots \over 4 * 3 * 2 * 1(n-4)(..

Algorithm/백준 2022.03.09

[BOJ] 1181 - 단어 정렬

문제 https://www.acmicpc.net/problem/1181 알파벳 소문자로 이루어진 임의의 개수의 단어를 입력받아, 아래와 같은 기준으로 정렬하는 코드를 작성하라. 1. 길이가 짧은 것부터 2. 같은 길이의 단어는 사전 순 같은 단어가 여러 번 입력된 경우, 한 번만 출력한다. 풀이 내 풀이 1. 단어의 수만큼 단어를 입력받아, set으로 저장한다. (중복 제거) 2. set을 list로 형 변환한 후, 사전 순으로 정렬한다. 3. 길이를 조건으로 하여 정렬한다. import sys n = int(sys.stdin.readline()) l = set(sys.stdin.readline()[:-1] for _ in range(n)) l = sorted(list(l)) l = sorted(l, k..

Algorithm/백준 2022.02.16

[BOJ] 2774 - 아름다운 수

문제 https://www.acmicpc.net/problem/2774 임의 개수의 10진수를 입력받아, 입력받은 값의 서로 다른 숫자의 개수를 출력하는 프로그램을 작성하라. 풀이 1. 10진수를 문자열로 입력받는다. 2. 입력 문자열의 중복을 제거한다. 3. 중복을 제거한 결과값의 길이를 출력한다. 코드 import sys for i in '_' * int(sys.stdin.readline()): print(len(set(sys.stdin.readline()[:-1]))) 문자열의 중복을 제거하는 방법에는 여러 방법이 존재하지만 여기서는 간단하게 set으로 형변환하는 방식을 사용했다. 참고로 문자열을 set으로 형변환할 때 list로 형변환을 거칠 필요는 없다. 값을 입력받을 때 sys.stdin.re..

Algorithm/백준 2022.02.05

[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
1 2 3 4 5