BOJ 50

[BOJ] 1476 - 날짜 계산

문제 https://www.acmicpc.net/problem/1476 준규가 사는 나라에서는 숫자 E, S, M 3개를 이용해서 연도를 나타낸다. 그리고 이 세 수는 아래와 같은 범위를 가진다. 1 ≤ E ≤ 15 1 ≤ S ≤ 28 1 ≤ M ≤ 19 우리가 알고있는 1년은 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다. 예를 들어, 15년은 15 15 15로 나타낼 수 있다. 하지만, 1년이 지나서 16년이 되면 16 16 16이 아니라 1 16 16이 된다. E S M 년도를 입력받아, 우리가 알고 있는 연도를 계산하라. 풀이 내 풀이 나는 연도를 증가시킨 후, 그 연도를 E S M 연도와 비교하는 방식을 사..

Algorithm/백준 2022.05.12

[BOJ] 10972 - 다음 순열(next permutation)

문제 https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 1부터 N까지의 수로 이루어진 순열을 입력으로 받아, 사전 순으로 다음에 오는 순열을 구하여라. 사전 순으로 가장 첫 순열은 오름차순으로 이루어진 순열이고, 가장 마지막 순열은 내림차순으로 이루어진 순열이다. 예시 ) 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1, 2 3, 2, 1 입력 첫째 줄은 N을, 둘째 줄은 순열이 주어진다. 입력 받은 순열이 가장 마지막 순열인 경우에는 -1을 출력한다. 풀이 1. 순열의 오른쪽 끝에서부터..

Algorithm/백준 2022.05.10

[BOJ] 2556번 별 찍기 - 14

문제 https://www.acmicpc.net/problem/2556 자연수 n을 입력받은 후, 지금까지 안 나온 별 찍기 방식으로 n개의 줄에 걸쳐 별을 적절히 찍으세요. 풀이 문제가 꽤 당황스러운데…… 별 찍기 관련 문제는 https://www.acmicpc.net/workbook/view/20 에 모여있다. 별 찍기 문제를 1번부터 13번까지 확인해보면 직각삼각형, 이등변삼각형, 마름모, 나비 모양, 모래시계 모양 등을 출력하도록 요구하고 있는데, 정작 정사각형 모양은 요구한 적이 없는 것을 알 수 있다. 즉, 정사각형 모양이 되도록 별을 찍으면 된다. import sys n = int(sys.stdin.readline()) for i in range(n): print("*" * n)

Algorithm/백준 2022.05.02

[BOJ] 1269 - 대칭 차집합

문제 https://www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 두 집합 A와 B에 대해 (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 할 때, 그 원소의 개수를 구하여라. 예시 ) $$ A = \{1, 2, 4 \}, B = \{2, 3, 4, 5, 6 \}$$ $$ A-B = \{1 \}$$ $$ B-A = \{ 3, 5, 6\}$$ $$ A \triangle B=(A..

Algorithm/백준 2022.04.29

[BOJ] 1748 - 수 이어 쓰기 1

문제 https://www.acmicpc.net/problem/1748 첫째줄에 N을 입력받아, 1부터 N까지의 수를 이어서 쓴 하나의 수의 자릿수를 구하여라. 예시) n = 15 이어쓴 수 : 123456789101112131415 자릿수 : 21 풀이 틀린 풀이 N까지 이어서 쓴 수를 실제로 구한 뒤, 그 길이를 출력하는 방법을 썼다. import sys n = int(sys.stdin.readline()) print(len("".join([str(i) for i in range(1, n + 1)]))) 무식한 방법이었는지, 메모리 초과로 틀린 풀이였다. 맞은 풀이 i번째 자리수가 등장하는 개수와 N과의 관계를 생각해보자. 자릿수 범위 개수 1번째 (1의 자릿수) 1 ~ N N - 1 + 1 2번째 ..

Algorithm/백준 2022.04.21

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