문제 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 정답 소스코드 (Python) def if_decimal(num): if num==1: return for i in range(2,int(num**0.5)+1): if num%i==0: return count.append(num) m,n=map(int,input().split()) count=[] # 몇 개 해당하는지 for i in range(m,n+1): if_decimal(i) # m과 n사이에 숫자 하나씩 확인 print(*count) 풀이 (Python) 어떤 수 n이 소수라는 ..
파이썬
문제 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net 정답 소스코드 (Python) def gcd(x,y): while(y): x,y=y,x%y return x num1,num2=map(int,input().split()) result=gcd(num1,num2) print(result) print(int(num1*num2/result)) 풀이 (Python) 이 문제는 최대공약수를 구하는 방법을 모른다면 힘든 문제이다. 두 수의 각자 약수를 구한 후 비교하여 최대공약수를 구하게 되면, 시간초과가 발생한다. 알고리즘 공부를 하게 되면 처음으로 수학 파트를 공부하게 되는데 이때 ..
문제 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 정답 소스코드 (Python) n=int(input()) i=2 while i
문제 1522번: 문자열 교환 a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 www.acmicpc.net 정답 소스코드 (Python) arr=input() result=[] size=arr.count('a') #윈도우 크기 for i in range(len(arr)): b_count=0 for j in range(size): index=i+j if index>len(arr)-1:index-=len(arr) #index가 리스트를 넘어간다면 -=리스트크기 해주기-> 원형 유지 if arr[index]=="b":b_count+=1 result.append(b_cou..
문제 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 정답 소스코드 (Python) from collections import deque n,k=input().split() n,k=int(n),int(k) field=deque() field.extend(list(map(int,input().split()))) step=0 robot=deque() robot.extend([False for i in range(n)]) #로봇이 있다면 true 없다면 false while True: step+..
문제 2304번: 창고 다각형 첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의 www.acmicpc.net 정답 소스코드 (Python) n=int(input()) arr=[] for i in range(n): #입력받기 l,h=input().split() arr.append([int(l),int(h)]) arr.sort() #정렬 arr_max,arr_max_index=0,0 for i in range(n): #최댓값 찾기 if arr_max
문제 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 풀이 (Python) e,s,m=map(int,input().split()) result,tmp=0,0 while True: result=s+tmp*28#태양 기준 해당 년도=나머지(s입력값)+몫(tmp)*28(태양 주기) E_mod=15 if result%15==0 else result%15#해당 년도 기준에 맞춰 지구 값 조절 M_mod=19 if result%19==0 else result%19#해당 년도 기준에 맞춰 달 값 조절 if E_mod==e an..
문제 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이 (Python) n=int(input()) for i in range(1,n+2): tmp,tmp_sum=str(i),0 for j in range(len(tmp)):tmp_sum+=int(tmp[j]) #각 자리수 더하기 tmp_sum+=i #입력받은 숫자를 더하기 if tmp_sum==n:break #생성자인 경우 if i>n:print(0) #생성자가 없는 경우 예외처리 else:print(i) 설명 (Python) ..
문제 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 풀이 (Python) import sys sys.setrecursionlimit(10 ** 6) # 메모리 초과 방지 n=int(input()) arr=[] count=0 blindness_count=0 for _ in range(n):arr.append(list(input())) visited=[[False for i in range(n)] for j in range(n)] # 방문 여부 체크 리스트 def dfs(color,y,x,mode): # ..
문제 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 (Python) from collections import deque n=int(input()) arr=[] result=[] #각 단지의 집의 수 count=0 #result에 입력하기 위한 count변수 for _ in range(n):arr.append(list(map(int,list(input())))) visited=[[False for i in range(n)] for j in range(n)] #방문 여부 확인 def bfs(x,y): qu..