잡설예전에 풀었던 문제들 다시 풀어봤다. 그냥 푸는것보다 예전보다 빠르거나 숏코딩으로 짜보는 것도 재미있을 것 같아서 옛날에 짠 코드들을 비교해보면서 짜보았다.문제1895 필터풀이단순하게 3*3 기준으로 생각해보면, 가장자리를 제외한 1~n-1, 1~m-1의 좌표와 그 좌표 주변의 값들만 확인하면 된다. dx, dy를 능숙하게 다룰 수 있는 사람이라면 해당 개념을 이용해 간단하게 해결할 수 있다. 값들의 크기가 그리 크지 않아서 단순하게 매번 배열을 새로 만들던, 슬라이싱을 하던 상관 없이 해결 할 수 있다.코드n,m=map(int,input().split())a=[input().split()for i in range(n)]x=[0,0,0,1,1,1,-1,-1,-1]y=[0,1,-1,1,0,-1,1,0,..
문제KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 예를 들어, 주어진 용액들의 특성값이 [-99, -2, -1, 4, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액의 ..
문제 https://www.acmicpc.net/problem/12101문제정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.1+1+1+11+1+21+2+12+1+12+21+33+1이를 사전순으로 정렬하면 다음과 같이 된다.1+1+1+11+1+21+2+11+32+1+12+23+1정수 n과 k가 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법 중에서 k번째로 오는 식을 구하는 프로그램을 작성하시오.입력첫째 줄에 정수 n과 k가 주어진다. n은 양수이며 11보다 작고, k는 231-1보다 작거나 같은 자연수이다.출력n을 1, 2, 3의 합으로 나타내는 방법 중에서 사전 순으로 k번째에 오는 것을 출력한다. k번째 오는 식이 없는 경..
https://www.acmicpc.net/problem/17204알고리즘그래프를 그리고, 0번에서 시작하여 k번까지의 최소 거리를 찾는 문제이다.간선 사이의 거리를 1로 설정하여 다익스트라 알고리즘을 돌려준 뒤에 distance배열에서 k번째 원소의 값을 읽어와 INF면 -1을, 아니면 거리를 출력해주면 된다.코드import sysimport heapqinput = sys.stdin.readlineINF = int(1e9)n, target = map(int, input().split())graph = [[] for _ in range(n)]distance = [INF] * n for a in range(n): b = int(input()) graph[a].append((b, 1)) def..
https://www.acmicpc.net/problem/2346입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.각 테스트 케이스의 첫째 줄에는 수행할 함수 p가 주어진다. p의 길이는 1보다 크거나 같고, 100,000보다 작거나 같다.다음 줄에는 배열에 들어있는 수의 개수 n이 주어진다. (0 ≤ n ≤ 100,000)다음 줄에는 [x1,...,xn]과 같은 형태로 배열에 들어있는 정수가 주어진다. (1 ≤ xi ≤ 100)전체 테스트 케이스에 주어지는 p의 길이의 합과 n의 합은 70만을 넘지 않는다.출력각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. 문제 코드from collec..
https://www.acmicpc.net/problem/13334알고리즘 분류자료 구조 정렬 스위핑 우선순위 큐문제집과 사무실을 통근하는 n명의 사람들이 있다. 각 사람의 집과 사무실은 수평선 상에 있는 서로 다른 점에 위치하고 있다. 임의의 두 사람 A, B에 대하여, A의 집 혹은 사무실의 위치가 B의 집 혹은 사무실의 위치와 같을 수 있다. 통근을 하는 사람들의 편의를 위하여 일직선 상의 어떤 두 점을 잇는 철로를 건설하여, 기차를 운행하려고 한다. 제한된 예산 때문에, 철로의 길이는 d로 정해져 있다. 집과 사무실의 위치 모두 철로 선분에 포함되는 사람들의 수가 최대가 되도록, 철로 선분을 정하고자 한다.양의 정수 d와 n 개의 정수쌍, (hi, oi), 1 ≤ i ≤ n,이 주어져 있다. 여기..
문제 https://www.acmicpc.net/problem/13549 Algorithm다익스트라 탐색X - 1 칸, X + 1 칸, 2 * X 칸 이동을 각 각 하나의 간선으로 생각하여 구현하면 되는 문제이다. 다만 조건에 유의해야 할 필요가 있다. N과 K의 관계를 유의하자. Codeimport heapqinput = __import__('sys').stdin.readlinedef dijkstrat(start) : q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q : dist, now = heapq.heappop(q) if distance[now] = sizeG * 2 + 1: ..
https://www.acmicpc.net/problem/12840문제창용이는 여름을 맞이하여 ‘정창용’ 이름이 쓰인 한정판 섬머 에디션 시계를 구입했다. 왠지 오늘은 001도 가고 싶지 않고 시계를 가지고 놀고만 싶다. 우린 방에 있는 창용이가 시계를 가지고 뭘 하는지 궁금하기만 하다. 창용이는 시계의 건전지를 분리했기 때문에 시계는 시간이 흐르지 않는다.창용이는 앞으로 시계를 돌리기도 하고 뒤로 시계를 돌리기도 한다. 입력으로는 초기 현재 시간이 주어지고 q개의 쿼리가 주어진다.한 쿼리는 T로 시작한다. (1 ≤ T ≤ 3, 0 ≤ c ≤ 10,000,000)T가 1일 때는 c를 입력으로 받아와서, 시계를 앞으로 c초 돌린다.T가 2일 때는 c를 입력으로 받아와서, 시계를 뒤로 c초 돌린다.T가 3일..
문제방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다.입력첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 정점 사이에 여러 개의 간선이 존재할 수도 있음에 유의한다.출력첫째 줄부..
https://www.acmicpc.net/problem/5972알고리즘 분류그래프 이론 최단 경로 데이크스트라문제농부 현서는 농부 찬홍이에게 택배를 배달해줘야 합니다. 그리고 지금, 갈 준비를 하고 있습니다. 평화롭게 가려면 가는 길에 만나는 모든 소들에게 맛있는 여물을 줘야 합니다. 물론 현서는 구두쇠라서 최소한의 소들을 만나면서 지나가고 싶습니다.농부 현서에게는 지도가 있습니다. N (1 다음 지도를 참고하세요. [2]--- / | \ /1 | \ 6 / | \ [1] 0| --[3] \ | / \2 4\ | /4 [6] \ | /..
문제 https://www.acmicpc.net/problem/2630문제아래 과 같이 여러개의 정사각형칸들로 이루어진 정사각형 모양의 종이가 주어져 있고, 각 정사각형들은 하얀색으로 칠해져 있거나 파란색으로 칠해져 있다. 주어진 종이를 일정한 규칙에 따라 잘라서 다양한 크기를 가진 정사각형 모양의 하얀색 또는 파란색 색종이를 만들려고 한다.전체 종이의 크기가 N×N(N=2k, k는 1 이상 7 이하의 자연수) 이라면 종이를 자르는 규칙은 다음과 같다.전체 종이가 모두 같은 색으로 칠해져 있지 않으면 가로와 세로로 중간 부분을 잘라서 의 I, II, III, IV와 같이 똑같은 크기의 네 개의 N/2 × N/2색종이로 나눈다. 나누어진 종이 I, II, III, IV 각각에 대해서도 앞에서와 마찬가지로 ..
https://www.acmicpc.net/problem/1504알고리즘출발점이 1 종료지점이 n이고 v1, v2를 지나는 최단경로의 길이를 출력하는 문제이다. 가능한 경로는1 -> v1 -> v2 -> n / 1 -> v2 -> v1 -> n 두가지 경로가 존재하므로 각각의 경우를 전부 계산해서 더해준 뒤에 더 작은 값을 출력해주면 된다.출발점을 1, v1, v2 로 하여 다익스트라를 진행한 뒤에 각각의 경우를 더해서 최단경로를 계산해주었다.모든 경우마다 다익스트라를 실행하면 시간이 많이 소요되기 때문에, 각각의 경우에 대해 1번씩만 수행한 뒤에 distance배열을 리턴값으로 받아서 마지막에 더해주었다.코드import sysimport heapqinput = sys.stdin.readlineINF ..