2022년 12월 31일에 작성됨 https://www.acmicpc.net/problem/5426 5426번: 비밀 편지 선영이는 남자친구를 위해 연애 편지를 썼다. 선영이는 편지가 남들에게 읽히는 것을 막기 위해서 편지를 암호화하려고 한다. 먼저, 편지의 내용을 정사각형에 작성한다. 그 다음, 시계방향으로 www.acmicpc.net 문제 분석 암호화된 문자 길이의 제곱근은 정사각형의 한 변의 길이가 된다. 따라서 원래 내용을 구할려면, 암호화된 문자 길이의 제곱수만큼 나누어진 각 구간의 끝 문자부터 차례대로 출력하면 된다. RSTㅡEEOㅡTCP eedARㅡBtVroㅡlsiesㅡuAoReㅡerles EarSㅡvyeqㅡeBsuㅡneMa TOPSECRET RosesAreRedVioletsAreBlue S..
2022년 12월 30일에 작성됨 https://www.acmicpc.net/problem/5211 5211번: 가단조와 다장조 첫째 줄에 음악이 주어진다. 음악은 {"A", "B", "C", "D", "E", "F", "G", "|"}로 이루어져 있으며, 길이는 5보다 크거나 같고, 100을 넘지 않는다. |가 연속해서 등장하거나, 문자열의 양쪽 끝에 나오는 경우 www.acmicpc.net 문제 분석 각 마디를 |을 기준으로 나눠서 각 마디의 첫 음으로 나오는 중심음이 다장조인지 가단조인지 판별해주고 그 개수를 세어서 더 많은 음계가 그 음악의 음계가 된다. 만약, 개수가 같은 경우에는 마지막 마디의 맨 끝의 음으로 음계를 정한다. 소스 코드 (⭕) da_long = ["C", "F", "G"] ga..
2022년 12월 28일에 작성됨 https://www.acmicpc.net/problem/5566 5566번: 주사위 게임 상근이는 혼자 보드 게임을 하고 있다. 이 보드 게임의 보드는 N칸으로 이루어져 있고, 출발점은 1칸, 도착점은 N칸이다. 각 칸에는 지시 사항이 적혀있다. 지시 사항은 말을 얼만큼 이동해야 하 www.acmicpc.net 문제 분석 주사위를 굴린 수와 나온 눈의 수만큼 이동했을 때 도착한 칸에 있는 수를 구분하여 생각해준다. 소스 코드 (⭕) import sys input = sys.stdin.readline n, m = map(int, input().split()) board = [] dice = [] corrent = 0 # 현재 위치 move = 0 # 도착 칸에 있는 이동..
2022년 12월 27일에 작성됨 https://www.acmicpc.net/problem/13301 13301번: 타일 장식물 대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개 www.acmicpc.net 문제 분석 직사각형 둘레의 길이의 합은 바로 직전의 정사각형 둘레와 전전의 정사각형 둘레의 합과 같다. 따라서 타일이 1개와 2개인 경우에만 따로 둘레 길이를 4와 6으로 설정해주고 이후부턴 전과 전전의 합으로 둘레의 길이를 구할 수 있다. 소스 코드 (⭕) n = int(input()) d = [0]*81 # d의 81개의 요소를 전부 0으로 채움 d[0] = 4..
2022년 12월 26일에 작성됨 https://www.acmicpc.net/problem/17358 17358번: 복불복으로 지구 멸망 (2,1,4,3), (3,4,1,2), (4,3,2,1) 총 3가지 경우가 가능하다. www.acmicpc.net 문제 분석 쉽게 예를 들어 1, 2, 3, 4, 5, 6번의 6개의 컵이 있다고 가정해보자. 1번 컵이랑 어느 컵의 위치를 바꿀지 5개의 경우의 수(2, 3, 4, 5, 6)가 있다. 1번과 6번을 택한다고 하면 남은 컵은 2, 3, 4, 5번 컵이 있다. 2번 컵이랑 어느 컵의 위치를 바꿀지 3개의 경우의 수(3, 4, 5)가 있다. 2번과 4번을 택한다고 하면 남은 컵은 자동으로 3번과 5번이 된다. 따라서 컵이 6개일 때의 경우의 수는 5 * 3 * ..
2022년 12월 25일에 작성됨 https://www.acmicpc.net/problem/25373 25373번: 벼락치기 부산사이버대학교에 다니는 대희는 강의 영상 보는 것을 매일 미뤘다. 오늘은 중간고사가 일주일 남은 날이다. 대희는 더 이상 미루면 큰일이 날 것 같아서 오늘부터 밀린 영상을 보기로 했다. www.acmicpc.net 문제 분석 일주일 안에 n개의 영상을 모두 봐야 한다. 전날은 항상 다음날보다 영상을 적게 본다. 첫날 들어야 하는 영상 개수의 최솟값을 출력한다. 7+6+...+1 = 28을 기준으로 나눈다. 1. n이 28보다 작은 경우 n=1이면 1 n=2이면 2 n=3이면 2 1 n=4이면 3 1 n=5이면 3 2 n=6이면 3 2 1 n=7이면 4 3 또는 4 2 1 n=8이..
2022년 12월 23일에 작성됨 https://www.acmicpc.net/problem/25643 25643번: 문자열 탑 쌓기 인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 한 층에 하나씩 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대 www.acmicpc.net 소스 코드 (⭕) n, m = map(int, input().split()) str = [] for _ in range(n): str.append(input()) for i in range(n-1): str1 = str[i] str2 = str[i+1] check = False for j in range(1, m+1): if str1[m-j:] == str2[:..
2022년 12월 16일에 작성됨 https://www.acmicpc.net/problem/2057 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 문제 분석 큰 팩토리얼부터 살펴보면서 그 값이 n보다 작으면 변수 sum에 더해주고 크면 넘어가는 식으로 반복해서 누적합 sum이 n과 같아지는지 비교해본다. 소스 코드 (⭕) n = int(input()) # 1! ~ 20! 까지 값을 구함 fact = [1, 1] for i in range(2, 21): fact.append(fact[i-1]..
2022년 12월 14일에 작성됨 https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 문제 분석 n개의 시리얼 번호 문자열을 입력받고, 기준에 따라 정렬하여 출력한다. 1. 길이가 짧은 순서 2. 모든 자리수의 숫자만 더한 값이 작은 순서 3. 사전 순서 소스 코드 (⭕) import sys input = sys.stdin.readline def sum_num(x): result = 0 for i in x: if i.isdigit() == T..
2022년 12월 8일에 작성됨 https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 문제 분석 집합 s에 있는 문자열과 검사해야 하는 문자열을 입력받고, 집합 s에 검사할 문자열이 있으면 카운트 해준다. 소스 코드 (⭕) import sys input = sys.stdin.readline n, m = map(int, input().split()) s = set() for _ in range(n): s.add(inpu..