본문 바로가기

Problem Solving83

[Python]6064. 카잉 달력 https://www.acmicpc.net/problem/6064 6064번: 카잉 달력 문제 최근에 ICPC 탐사대는 남아메리카의 잉카 제국이 놀라운 문명을 지닌 카잉 제국을 토대로 하여 세워졌다는 사실을 발견했다. 카잉 제국의 백성들은 특이한 달력을 사용한 것으로 알려져 있다. 그들은 M과 N보다 작거나 같은 두 개의 자연수 x, y를 가지고 각 년도를 와 같은 형식으로 표현하였다. 그들은 이 세상의 시초에 해당하는 첫 번째 해를 로 표현하고, 두 번째 해를 로 표현하였다. 의 다음 해를 표현한 것을 이라고 하자. 만일 www.acmicpc.net 그냥 브루트포스로 구현하면 최대 경우의 수가 40000^2 으로 제한시간내에 통과할 수 없다. 규칙을 찾아서 연산해서 값을 구해야 한다. 전체 경우의 수를.. 2019. 4. 9.
[Python]17136. 색종이 붙이기 https://www.acmicpc.net/problem/17136 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐 www.acmicpc.net 두번째로 풀어본 상시 역량테스트 기출문제. 어려웠다. 아직도 실력이 많이 부족한 것같다. ㅜㅜ 고사장에 있을 때 DFS로 하면 되겠다고 생각하긴 했었지.. 2019. 4. 8.
[Python]1107. 리모컨 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이 주어지며, 같은 버튼이 여러번 주어지는 경우는 없다. www.acmicpc.net 브루트포스로 접근 Step1.먼저 0~1,000,000 까지 수를 생성한다 Step2.생성된 수 중에서 고장난 숫자를 포함하고 있으면 버린다. 고장난 수를 포함하지 않으면 channels 에 추가한다. Step3.channels에서 가장 최소값을 구한다 Step4.현 위치(100)에서의 눌러야 하는 값과 Step3에서 구한 최.. 2019. 4. 8.
[Python]2225. 합분해 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 2차원 DP로 접근하면 쉽게 해결할 수 있는 문제였다. 조건에서 0 2019. 4. 8.
[Python]1699. 제곱수의 합 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로, 11을 그 합으로써 표현할 수 있는 제곱수 항의 최소 개수는 www.acmicpc.net dp[i-1] 이 아닌 dp[i-j^2] 을 이용해서 제곱수의 합을 DP로 구현하는 것이 포인트. dp[i] = min(dp[i-j^2.. 2019. 4. 7.
[Python]17135. 캐슬 디펜스 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 처음으로 친 상시 역량테스트의 문제. 문제를 풀기 전 제약사항이 크지 않으므로 완전탐색을 해도 되겠다고 생각했다. 순서도를 그려보자 코드는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51.. 2019. 4. 7.
[Python]13398. 연속합 2 https://www.acmicpc.net/problem/13398 13398번: 연속합 2 첫째 줄에 정수 n(1≤n≤100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 하나 제거할 때의 연속합의 최대값이란, 특정 시점 (i) 를 기준으로 앞에서부터의 연속합 중 (i-1) 위치와 뒤에서부터의 연속합 중 (i+1) 위치의 연속합의 합이다. 다시말해, dp2[i] = dp[i-1]+dr[i+1], 단 1 2019. 4. 7.
[Python]14002. 가장 긴 증가하는 부분 수열 4 (LIS) https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net 핵심아이디어는 변경시킨 인덱스를 별도의 배열에 저장하여 역추적 하는 것(v 에 저장 후 역추적). n = int(input()) a = [0]+list(map(int, input().split())) DP = [0]*(n+1) v = [-1]*(n+1) for i in range(1,n+1): f.. 2019. 4. 5.
[Python]11053. 가장 긴 증가하는 부분 수열 (LIS) https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net 아이디어를 떠올리기 어려웠다. LIS 는 굉장히 중요한 문제이므로 연습이 필요하다. 정답은 부분수열이므로, 특정 시점에서 (i) 에서 맨 앞쪽까지 크기 비교를 수행한 뒤, 가장 큰 길이(DP 값)를 구해서 마지막에 자기자신(+1)을 더한다. 즉 D[i] = max(D[i-1], D[i-2], ... .. 2019. 4. 5.
728x90
반응형