목록CodingTest/Python (74)
기록방
👉 문제링크 2057번: 팩토리얼 분해 음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은 www.acmicpc.net 🔸 문제 분석 🔸 팩토리얼의 조합으로 n을 만들 수 있는지 판단한다. n보다 작은 팩토리얼을 큰 수부터 n을 빼며 0을 만들 수 있는지 확인한다(그리디) 🔸 코드 🔸 fact = [0] * 20 fact[0] = 1 for i in range(1, 20): fact[i] = fact[i-1] * i n = int(input()) if n == 0: print("NO") else: for i in range(19, -1, -1): i..
👉 문제링크 2999번: 비밀 이메일 정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과 www.acmicpc.net 🔸 문제 분석 🔸 문자열을 입력받으면 행렬이 가능한 정사각형에 가깝고, 행의 개수가 열의 개수보다 작거나 같은 형태로 변환한다. 행렬에 왼쪽 열부터 세로 방향으로 쓰고, 첫 행부터 가로 방향으로 읽어 출력한다. 🔸 코드 🔸 s = input() r = 0 c = 0 for i in range(1, len(s)//2 + 1): if len(s) % i == 0 and i
👉 문제링크 2909번: 캔디 구매 오늘은 화이트데이이다. 상근이는 여자친구를 위해서 사탕을 사려고 한다. 하지만, 상근이는 독특한 성격을 가지고 있어서, 특정 액면가의 지폐만 가지고 있는다. 또, 거스름돈은 받지 않는다. www.acmicpc.net 🔸 문제 분석 🔸 숫자 c와 k가 입력되면, c의 k자리에서 반올림한 값을 출력한다. 🔸 코드 🔸 c, k = map(int,input().split()) print(int(round(c + 0.1, -k))) 🔸 코드 해석 🔸 round 함수로 정수 반올림을 위해서 k를 음수로 지정해야한다. python의 round함수는 일반적으로 아는 4사5입이 아닌 5사5입이다. 정확히는 앞 자리가 홀수면 올림, 짝수면 버림을 수행한다. 이 문제에서는 0.1만 더해줘..
👉 문제링크 25643번: 문자열 탑 쌓기 인경이는 $N$개의 문자열을 쌓아서 문자열 탑을 완성하려고 한다. 탑을 완성하기 위해서는 모든 문자열을 아래에서부터 순서대로 쌓아 올려야 한다. 인경이는 문자열 탑의 꼭대기에 다음 순서의 www.acmicpc.net 🔸 문제 분석 🔸 새로 들어온 문자열이 이전 문자열에 결합이 되는지 확인하며 전부 결함 가능하면 1, 아니라면 0을 출력한다. 문자열 블록을 끼는 경우의 수는 3가지이다. 완전히 같은 문자열로 모든 칸을 끼움 새로 들어온 문자열 블록이 왼쪽으로 튀어나옴 새로 들어온 문자열 블록이 오른쪽으로 튀어나옴 두 문자열 블록의 겹치는 부분의 길이를 1부터 m까지 키워가며 결합이 되는 순간이 올 때까지 계산한다. 🔸 코드 🔸 n, m = map(int,input..
👉 문제링크 25373번: 벼락치기 부산사이버대학교에 다니는 대희는 강의 영상 보는 것을 매일 미뤘다. 오늘은 중간고사가 일주일 남은 날이다. 대희는 더 이상 미루면 큰일이 날 것 같아서 오늘부터 밀린 영상을 보기로 했다. www.acmicpc.net 🔸 문제 분석 🔸 영상의 개수 n을 다음과 같이 나눴을 때 첫날 봐야하는 영상의 최소값을 출력한다. 7일 안에 나눠서 영상을 모두 본다. 다음 날은 오늘보다 적은 수의 영상을 봐야한다. n이 10^17 까지 주어지므로 단순 반복문으로 구하면 시간초과가 난다. 실제 값을 계산해보며 규칙을 찾아보았다. # n # 1 1 # 2 2 # 3 2 1 # 4 3 1 # 5 3 2 # 6 3 2 1 # 7 4 3 # 8 4 4 # 9 4 3 2 # 10 4 3 2 1 ..