문제 https://www.acmicpc.net/problem/1644 풀이 먼저 소수를 찾는 방법은 에라토스테네스의 체 방법으로 찾을 수 있다. 2부터 자신이 현재까지 나눠지지 않아 True(소수)라면, 해당 수를 소수 리스트에 넣고 그의 배수를 False(소수가 아님)으로 바꿔준다. 이후 소수들에 대해 투포인터를 활용해 연속된 수의 합을 구해본다. 연속된 수의 합이 원하는 수라면 count를 하나씩 늘려 값을 찾는다. 코드 N = int(input()) eratos = [False, False] + [True]*(N-1) primes = [] for i in range(2,N+1): if eratos[i]: primes.append(i) for j in range(2*i, N+1, i): eratos..
Koala - 12기
문제 https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 다이나믹 프로그래밍 알고리즘 문제이다. 코드 #include using namespace std; int N = 0; int M = 0; int str[1000][1000] = { 0, }; int main(){ cin >> N >> M; for (int i = 0; i str[i][j]; } } int sum[3] = { 0, }; for (int i = 0; i = sum[..
T=int(input()) L=[] K=[] P='' for i in range (T) : a,b=map(int,input().split()) K.append(a) K.append(b) K.sort(reverse=True) if a==b : if a==1 : L.append("Habb Yakk") elif a==2: L.append("Dobara") elif a==3: L.append("Dousa") elif a==4: L.append("Dorgy") elif a==5: L.append("Dabash") elif a==6: L.append("Dosh") elif (a==5 and b==6) or (a==6 and b==5) : L.append("Sheesh Beesh") else : for j in K ..
https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 알고리즘 분류 구현 시뮬레이션 문제 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기를 크기가 N×N인 격자에서 연습하려고 한다. 격자의 각 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지한다. 바구니에 저장할 수 있는 물의 양에는 제한이 없다. (r..
문제 https://www.acmicpc.net/problem/10867 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net 소스코드 N=int(input()) arrange = list(map(int,input().split())) arrange = list(set(arrange)) arrange.sort() for i in arrange: print(i,end=' ') 문제풀이 1. 개수를 의미하는 정수 N을 입력받는다. 2. 공백을 기준으로 값들을 입력받고, 리스트에 저장한다. 3. 리스트를 set()함수로 바꾸어 중복되는 값을 제거하고,..
https://www.acmicpc.net/problem/5704 문제 팬그램은 알파벳의 모든 글자들을 사용해서 만든 문장이다. "the quick brown fox jumps over a lazy dog"과 "jackdaws loves my big sphinx of quartz"은 팬그램이다. 문장이 주어졌을 때, 팬그램인지 아닌지를 알아내는 프로그램을 작성하시오. 입력 입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 많아야 200글자로 이루어져 있는 문장이다. 단어는 공백 하나로 구분되어 있다. 또, 단어는 알파벳 소문자로만 이루어져 있다. 입력의 마지막 줄에는 별표(*)가 하나 주어진다. 출력 각 테스트 케이스에 대해서, 입력으로 주어진 문장이 팬그램이라면 'Y', 아니라면 'N'를..
https://www.acmicpc.net/problem/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 문제 코드 A=input() B=input() dp=[[0]*1001 for _ in range(1001)] ans=0 for i in range(1, len(A)+1): for j in range(1, len(B)+1): if A[i-1]==B[j-1]: dp[i][j]=dp[i-1][j-1]+1 else: dp[i][j]=max(dp[i-1][j],..
문제 https://www.acmicpc.net/problem/15486 풀이 퇴사날 얻을 수 있는 가장 큰 이익은 다이나믹 프로그래밍을 활용하여 각 날짜까지 얻을 수 있는 최대 이익을 구하면 된다. 각 날까지 얻을 수 있는 이익을 0으로 초기화 시킨 배열 dp를 생성한다. 첫 날부터 일정 상담 시간 이후에 얻을 수 있는 금액을 구한다. 상담 종료 일정에 맞춰 그날 얻을 수 있는 총 금액을 구한다. 상담 시작일 이전까지 얻을 수 있는 최대 이익에 현재 상담 이익을 더하여 업데이트 한다. 가장 큰 이익을 출력한다. 코드 N = int(input()) chart = [list(map(int, input().split())) for _ in range(N)] dp = [0 for _ in range(N+1)]..
문제 https://www.acmicpc.net/problem/1965 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 www.acmicpc.net 풀이 최대 상자의 개수를 구하려면 다이나믹 프로그래밍을 활용한 최장 증가 부분 순열을 구현하면 된다. 전체 상자의 개수만큼 1로 이루어진 배열 dp를 생성한다. 두 번째 수부터 검사를 시작한다. 자신(i)보다 앞에 있는 수들(j) 중 작은 것이 있다면, 자신(i)의 dp와 해당 수(j)의 위치에 저장된 dp값 + 1을 비교하여 더 큰 값으로 갱신한다. 이중 반복문을 모두 돌면 dp에 저장된 값들 중 ..
문제 https://www.acmicpc.net/problem/10871 Algorithm 1. 첫째 줄에 n과 x, 둘째줄에 리스트로 수열 arr을 받아온다. 2. join 함수를 사용하기 위해 빈 ans 리스트를 만들어준다. 3. arr의 맨앞 숫자부터 x와 비교하며 더 작으면 ans에 넣어준다. 4. ans에 저장된 값들을 공백을 사용하여 출력한다. Code n, x = map(int, input().split()) arr = list(map(int, input().split())) ans = [] for i in range(n): if arr[i] < x: ans.append(arr[i]) print(' '.join(map(str, ans)))
https://school.programmers.co.kr/learn/courses/30/lessons/150368 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 할인율을 적용할때, Dfs을 이용하여 풀 수 있습니다. 또한 Comparable을 이용해 리턴할 리스트의 1번째값들이 정답이 되도록 정렬하였습니다. import java.util.*; class Solution { static class Service implements Comparable{ int num; int price; public Service(int num, int price) { t..
문제 https://www.acmicpc.net/problem/10173 10173번: 니모를 찾아서 여러 문장이 각 줄로 입력되며, 입력의 마지막에는 "EOI" 입력된다. 한 줄은 최대 80개의 글자로 이루어져 있다. www.acmicpc.net 소스코드 word = 'nemo' while True: st = input() if st == 'EOI': break else: if word in st.lower(): print('Found') else: print('Missing') 문제풀이 1. 문장에 'nemo'가 들어있는지 확인하기 위해 변수 word에 저장. 2. 입력받은 문장이 'EOI'일 때 종료하기 위해 반복문과 if문을 사용. 3. 'EOI'가 아닐 때 word가 입력받은 st에 있으면 'F..