본문 바로가기

개발

백준 알고리즘 1673 입력 : 치킨쿠폰 개수 n, 치킨과 교환할 수 있는 도장 개수 k 출력 : 주문할 수 있는 치킨 수 풀이 1. 쿠폰 개수만큼의 치킨을 주문하고 도장을 받는다 2. 도장으로 한마리 주문하고 도장 하나를 받는다 3. 도장으로 주문할 수 없을 때까지 주문한 뒤 지금까지 주문한 치킨 개수를 출력한다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include using namespace std; int main() { int stamp = 0; int coupon; int chicken = 0; int couponPerChick = 0; while(cin>>coupon>>couponPerChick){ stamp = coupon; chick..
백준 알고리즘 14889 입력 : 축구 인원 N과 능력치 테이블 출력 : 팀을 구성하는 경우의 수 중에서 두 팀 간의 능력치차이가 제일 적을 경우의 능력치 차이 값 풀이 1. 한 팀을 만드는 모든 경우의 수를 재귀함수를 통해 구한다. -> 재귀실행 1회 당 선수 1명 영입 -> 재귀실행 N/2회 실행시(기저조건), teamA에 인원이 N/2명이면 팀 능력치 계산 -> teamA에 없는 선수를 teamB에 영입해 능력치 계산 후 차이를 계산해 리턴 2. 중복을 피하기 위해 i번 선수 영입 후 다음 영입 선수는 i+1이상의 선수 중에서 선택 소스코드 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 3..
백준 알고리즘 14500 입력 : 종이사이즈 N*M, 종이 위에 적힌 수 출력 : 테트로미노와 닿은 수를 합한 수들 중 가장 큰 수 풀이 1. 테트로미노는 5개이지만 회전, 대칭이 가능하기 때문에 회전했을 때와 대칭했을 때의 모양도 각각 만들어둔다. -> 테트로미노는 왼쪽 위를 기준으로 만든다. ex) ---- : (0,0), (0,1), (0,2), (0,3) 2. 한 테트로미노의 기준점(왼쪽 맨위)을 종이 위의 모든 칸에 적용해 수를 합해본다. -> 종이를 벗어날 경우엔 0 3. 2번에서 구한 값들 중 가장 큰 수를 출력한다. 소스코드 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..
백준 알고리즘 14501 입력 : 퇴사까지 남은 날짜 N, 상담 일정표 출력 : 백준이가 받을 수 있는 최대 수익 풀이 1. 다이나믹 프로그래밍의 전형적인 문제이므로 재귀함수 하나, 캐시테이블 하나를 정의해둔다. 2. 기저조건 : 업무기간이 N일을 넘어갈 경우 수익이 발생할 수 없음으로 0을 반환하도록한다. 3. 각 날짜에 잡힌 상담을 할 경우와 안할 경우를 비교해 더 큰 쪽을 리턴 ->점화식 : C(i) = max( C(i+1), C(i+T[i]) + P[i] ) 소스코드 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 #include #include using namespace std; int T[20]; int ..
백준 알고리즘 13458 입력 : 시험장 갯수 N, 시험장 별 인원 A[i], 총감독관이 감독가능한 인원 B, 부감독관이 감독가능한 인원 C 출력 : 필요한 감독관의 총 인원수 풀이 1. 각 시험장에 총감독관을 한명씩 비치 2. 총감독관으로 관리할 수 없는 인원이 있으면 부감독관을 비치 3. (A[i]-B) / C 이 연산을 통해 각 시험장에 필요한 부감독관 인원을 바로 구할 수 있다. -> (A[i]-B) % C > 0이면 위 연산의 결과에서 부감독관이 한명 더 필요하다 4. 시험장 갯수, 인원이 모두 최대 10만이기 때문에 결과값은 int범위를 넘어갈 수 있다. -> long long으로 선언 소스코드 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 ..
백준 알고리즘 11931 입력 : 배열의 크기 N(1
백준 알고리즘 14499 머리에서 주사위 빙글빙글 하다 머리 터질뻔... 입력 : 지도의 가로세로 크기(N, M), 주사위를 놓은 좌표(X, Y), 명령어 갯수(K), 지도 및 명령어 출력 : 한 명령어를 수행할 때마다 주사위 윗면의 숫자를 출력 풀이 1. 주사위를 코드로 표현. 전역변수로 저장 0 North 0 0 West Top East Bottom 0 South 0 0 0 Bottom 0 0 * Bottom이 두 개인 이유는 동.서로 굴릴 경우와 남.북으로 굴릴 경우 모두를 쉽게 표현하기 위함 2. 주사위를 동서남북으로 굴리는 함수를 정의 -> 방향을 파라미터로 입력받는다. -> 동.서 방향은 2번 row을 좌우로 Shift, 남.북 방향은 2번 column을 위아래로 Shift -> Shift한 뒤에 두 Bottom값을 ..
백준 알고리즘 12100 입력 : N * N 크기 2048게임판이 주어졌다. 출력 : 2048게임의 룰에 맟춰 좌우상하로 움직일 수 있을 때, 5번 움직여 만들 수 있는 가장 큰 수 풀이 1. vector를 사용해 입력으로 주어진 게임판을 저장 2. 좌우상하로 한번 움직인 후의 게임판의 모습을 반환하는 함수를 각각 정의 -> 한 숫자는 한 차례에 한 번만 합쳐질 수 있다 ex) 8 4 2 2 를 오른쪽으로 이동시키면 0 8 4 2가 되어야 함. 0 0 0 16이 되면 안됨 -> 계산 범위가 0~N-1을 벗어나지 않도록 지정해야 한다. 3. 게임판을 파라미터로 받는 함수 moveBoard에서 좌우상하 모두 이동시켜본다. 4. 좌우상하로 이동시켜본 후의 게임판정보를 사용해 총 4회 moveBoard를 재귀실행해 가장 큰 값을 리턴한..