문제 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 정답 소스코드 (Python) from collections import deque n,m=map(int,input().split()) field=[] for i in range(n):field.append(list(map(int,list(input())))) visited=[[[0 for k in range(2)] for i in range(m)]for j in range(n)] wall_break=0 dx=[0,0,1,-1] d..
파이썬
문제 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net 정답 소스코드 (Python) n=int(input()) arr=list(map(int,input().split())) arr.sort() count=0 for i in range(n): left,right=0,n-1 #기본 left, right설정 #반례 처리 N은 자기자신을 제외한 다른 수 이기 때문에 if i==0:left+=1 if i==n-1:right-=1 #투포인터 탐색 while leftarr[i]: right-=1 if right==i:right-=1 #반례 처리 N은..
문제 1205번: 등수 구하기 첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보 www.acmicpc.net 정답 소스코드 (Python) n,new,p=map(int,input().split()) if n==0:print(1) else: grade=list(map(int,input().split())) for i in range(len(grade),p):grade.append(-1) p_in=False rank=[1] for i in range(1,p): if grade[i]==grade[i-1]:rank.append(rank[i-1..
문제 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net 정답 소스코드 (Python) cost=int(input()) cost=1000-cost result=0 def calculate(value): global cost,result if cost>=value: result+=cost//value cost-=value*(cost//value) for ele in [500,100,50,10,5,1]:calculate(ele) print(result) 풀이 (Python) 그리디 문제의 제일 ..
문제 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 정답 소스코드 (Python) cnt=1 while True: l,p,v=map(int,input().split()) if l==p==v==0:break result= l*(v//p)+l if v%p>l else l*(v//p)+v%p print(f"Case {cnt}: {result}") cnt+=1 풀이 (Python) 문제이해가 어려운 문제일 수도 있다. 문제의 예시로 아래에 설명하겠다. 좌측과 같이 28일의 휴가가 있다고 할 때 여기서의 분홍색..
문제 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 정답 소스코드 (Python) n=int(input()) arr=list(map(int,input().split())) arr.sort() result=0 time=0 for i in range(n): time+=arr[i] result+=time print(result) 풀이 (Python) 문제는 길지만 실제적으로, 현재 i번째 사람이 인출할 때 i앞까지 모든 사람의 시간을 총합에 더해주어 최소로 나오는 총합을 출력하는 문제이다. P1 = 3, P2 = 1, P3 = 4, P4 = 3..
문제 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 정답 소스코드 (Python) n=int(input()) arr=[] for i in range(n):arr.append(list(map(int,input().split()))) result=sorted(arr,key=lambda x:(x[1],x[0])) for ele in result:print(*ele) 풀이 (Python) 이중 배열 정렬하는 문제이다. 파이썬의 경우 sort() 함수를 사용하면..
문제 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 정답 소스코드 (Python) n=int(input()) arr=[] for i in range(n):arr.append(int(input())) for i in range(n): for j in range(i+1,n): if arr[i]>arr[j]: tmp=arr[i] arr[i]=arr[j] arr[j]=tmp print(*arr,sep="\n") 풀이 (Python) 간단한 오름차순 정렬을 묻는 문제이다. 풀이 제한 시간이 넉넉하기 때문에 다른 알고리즘 사..
문제 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 정답 소스코드 (Python) n=int(input()) edge=list(map(int,input().split())) vert=list(map(int,input().split())) result=0 vert_min=min(vert) skip_point=0 for i in range(n): recent_cost=vert[i] if skip_point>i:continue if vert_min==recent_cost: edge_sum=0 for ..
문제 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net 정답 소스코드 (Python) def dfs(vert,start): visited[vert]=True value=field[vert] if not visited[value]:dfs(value,start) elif visited[value] and value==start:result.append(value) n=int(input()) field=[0] result=[] for i in range(n):field.append(int(input())..