목록Algorithm (160)
alpyrithm_알파이리즘

1788 피보나치 수의 확장 www.acmicpc.net/problem/1788 1788번: 피보나치 수의 확장 첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 풀기 전 공부할 것 : 수학, 다이나믹 프로그래밍 풀이 n을 양수, 0, 음수일 때 나눠서 계산한다. n이 양수일 때, 1, 1, 2, 3, 5, 8, 13, ... 으로 피보나치 수이다. n이 음수일 때, 1, -1, 2, -3, 5, -8, ... 으로 피보나치 수이다. n이 양수라고 가정하고 피보나치 배열을 구한다. n이 음수일 때 그리고 2..

13305 주유소 www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 문제 풀기 전 공부할 것 : 그리디 알고리즘 풀이 1 도시의 개수와 도로의 길이, 주유소의 리터당 가격을 n, roads, costs에 입력받는다. 두 번째 도시로 가기 위해서 무조건 첫 번째에서 주유를 해야 한다. 첫 번째에서 두 번째 도시로 가는 도로의 길이 * 첫 번째 도시에서의 주유소의 리터당 가격을 더한다. for문을 돌면서 지금까지 주유 가격보다 이번 도시에서의 가격이..

4796 캠핑 www.acmicpc.net/problem/4796 4796번: 캠핑 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, L, P, V를 순서대로 포함하고 있다. 모든 입력 정수는 int범위이다. 마지막 줄에는 0이 3개 주어진다. www.acmicpc.net 문제 풀기 전 공부할 것 : 수학, 그리디 알고리즘, 사칙연산 풀이 입력이 여러 개의 테스트 케이스로 이루어져 있기 때문에 while문으로 반복해서 l, p, v를 입력받는다. 만약 l, p, v가 모두 0인 경우 break로 while문을 빠져나온다. 휴가의 v일 중 (v//p)만큼 l일을 온전히 캠핑장을 이용할 수 있다. 휴가의 v일 중 (v%p)에서 l과 작은 일만큼 캠핑장을 이용할 수..

9086 문자열 www.acmicpc.net/problem/9086 9086번: 문자열 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으 www.acmicpc.net 문제 풀기 전 공부할 것 : 구현, 문자열 풀이 import sys input = sys.stdin.readline t = int(input()) for _ in range(t): string = input().rstrip() print(string[0]+string[-1])

1259 팰린드롬수 www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 문제 풀기 전 공부할 것 : 구현, 문자열 풀이 여러 개의 테스트 케이스로 이루어져 있으므로 while문을 이용하여 입력을 반복한다. 입력이 0이라면 break를 통해 while문을 빠져나온다. 입력이 0이 아니라면 뒤에서 읽어도 똑같은 단어인지 확인하고 'yes'/'no'를 출력한다. import sys input = sys.stdin.readline while True: n = int(input()) i..

10610 30 www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한�� www.acmicpc.net 문제 풀기 전 공부할 것 : 수학, 정렬, 정수론 풀이 30의 배수가 되려면 10의 배수인지, 3의 배수인지를 확인하면 된다. 10의 배수 확인 방법 : 일의 자리 숫자가 0이면 된다. 3의 배수 확인 방법 : 모든 자리 숫자의 합이 3으로 나누어 떨어지면 된다. 이때 가장 큰 30의 배수는 큰 숫자대로 정렬하는 것이다. n = int(input()) nums = list(str(n)) num..

1969 DNA www.acmicpc.net/problem/1969 1969번: DNA DNA란 어떤 유전물질을 구성하는 분자이다. 이 DNA는 서로 다른 4가지의 뉴클레오티드로 이루어져 있다(Adenine, Thymine, Guanine, Cytosine). 우리는 어떤 DNA의 물질을 표현할 때, 이 DNA를 이루는 뉴클레오� www.acmicpc.net 문제 풀기 전 공부할 것 : 브루트포스 알고리즘 풀이 Hamming Distance의 합이 가장 작은 DNA 중 사전 순으로 가장 앞서는 것을 구하는 것이므로 같은 위치에 있는 DNA를 비교하면 된다. 같은 위치에 있는 DNA 중 가장 많은 뉴클레오티드로 이루어진 것 중 사전 순으로 가장 앞서는 것을 res에 더해주고 그것을 제외한 뉴클레오티드를 c..

2607 비슷한 단어 www.acmicpc.net/problem/2607 2607번: 비슷한 단어 첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이�� www.acmicpc.net 문제 풀기 전 공부할 것 : 구현, 브루트포스 알고리즘 풀이 1 첫 번째 단어를 dictionary 형태로 word에 저장한다. 단어들을 반복하여 단어의 알파벳을 word에서 -1 한다. 한 문자를 더하거나 빼거나 다른 문자로 바꾸는 경우에만 res에 +1을 한다. import copy import sys input = sys.stdin.readline n = int(input()) ..