문제 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/10173 10173번: 니모를 찾아서 여러 문장이 각 줄로 입력되며, 입력의 마지막에는 "EOI" 입력된다. 한 줄은 최대 80개의 글자로 이루어져 있다. www.acmicpc.net 소스코드 while True: s = input() if s == 'EOI': break s = s.lower() if "nemo" in s: print("Found") else: print("Missing") 문제풀이 1. 무한 반복 루프를 시작합니다. 2. 입력 값이 "EOI"일 경우 루프를 종료합니다. 3. 입력 값을 소문자로 변환하도록 합니다. 4. 조건문을 통해 입력 값 s에 "nemo"가 있는 경우와 없는 경우에 따른 출력 값을 설정합니다.
문제 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..
https://www.acmicpc.net/problem/1551 1551번: 수열의 변화 첫째 줄에 수열의 크기 N과 K가 주어진다. N은 20보다 작거나 같은 자연수이고, K는 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 둘째 줄에는 수열이 ‘,’로 구분되어 주어진다. 수열을 이루 www.acmicpc.net 문제 코드 n, k = map(int, input().split()) a = list(map(int, input().split(','))) for i in range(k): for j in range(len(a)-1): a.append(a[1]-a[0]) a.pop(0) a.pop(0) print(','.join(map(str, a))) 문제풀이 1. 수열의 크기 N과 반복할 횟수 K..
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 알고리즘 분류 다이나믹 프로그래밍 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지이다. 1. X가 3으로 나누어 떨어지면, 3으로 나눈다. 2. X가 2로 나누어 떨어지면, 2로 나눈다. 3. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 예제 풀이 n의 크기가 그다..
https://www.acmicpc.net/problem/25706 문제 코드 #include #include using namespace std; int main() { int N = 0; cin >> N; vector v1; vector ans(N); int num = 0; for (int i = 0; i > num; v1.push_back(num); } for (int i = N-1; i >=0; i--) { if (i == N - 1) { ans[i] = 1; } else { if (v1[i] == 0) { ans[i] = ans[i + 1] + 1; } else { if (i + v1[i] + 1 >= N) { ans[i] = 1; } else { ans[i] = ans[i + v1[i] + 1..
N = int(input()) import sys jlist=list(map(int, sys.stdin.readline().split())) step=[] sum=[] num=0 for i in range (N) : for j in range (i,N) : if j>i : num=num+jlist[num-1]+1 else : num=num+j+1 if num>N : break step.append(num) sum.append(len(step)) step=[] num=0 for k in sum : print(k,end=" ") [오답] 문제를 제대로 안읽었다가 만든 코드. 시간초과 걸려서 결국 처음부터 다시했다. 출발한 칸마다 밟는 칸을 계산해서 리스트에 넣고 그 리스트의 길이를 또 저장해뒀다가 한번에 출..
16395번: 파스칼의 삼각형 (acmicpc.net) 16395번: 파스칼의 삼각형 파스칼의 삼각형은 이항계수를 삼각형 형태로 배열한 것인데, 블레즈 파스칼(1623-1662)을 따라 이름 붙여졌다. 단순한 형태로, 파스칼의 삼각형은 다음과 같은 방법으로 만들 수 있다. N번째 행 www.acmicpc.net 문제코드 n,k=map(int,input().split()) #1~30 arr=[[],[1],[1,1]] for i in range(3,n+1): x=[1]*i for j in range(1,i-1): x[j]=arr[i-1][j-1]+arr[i-1][j] arr.append(x) print(arr[n][k-1]) 코드해설 다이나믹프로그래밍 이용 문제. 작은 문제로 쪼개어... 각 항마다 위의 두..
N=int(input()) skill=list(str(input())) num=0 used_list=[] for i in skill : if (i=='L' or i=='S') : used_list.append(i) elif (i=='K') : if 'S' in used_list : used_list.remove('S') num=num+1 else : break elif (i=='R') : if 'L' in used_list : used_list.remove('L') num=num+1 else : break else : num=num+1 print(num) 풀이 사전기술일때는 리스트에 저장, 연계기술일때 리스트에 저장되어있다면 1점, 저장되어있지 않다면 정지 일반 기술일때는 1점을 더한다. 코딩 시작한지 ..