"꾸준하고 완벽한 한 걸음"

Backtracking 4

[백준 05568] 카드 놓기 [Java]

문제https://www.acmicpc.net/problem/5568 풀이N개의 카드 중 K개를 골라서 만들어지는 숫자의 종류를 세는 문제다.고르는 순서에 따라 숫자가 달라지기 때문에 순열을 사용했다. for (int i = 0; i 만약 K개를 모두 골랐다면, 하나의 문자열로 합치고 집합에 추가하면 된다. private static void permutations(List permutation) { if (permutation.size() == K) { StringBuilder sb = new StringBuilder(); for (String num : permutation) { sb.append(num)..

[백준 03980] 선발 명단 [Java]

문제https://www.acmicpc.net/problem/3980 풀이11명의 선수들이 각 포지션에서의 적합한 능력치를 바탕으로 모든 포지션에 배치했을 떄, 선수들의 최대 능력치 합을 구하는 문제다.완전 탐색을 통해 충분히 구할 수 있으나, 여러 TC가 존재하기 때문에 최적화를 진행해야 한다.한 선수는 11개 중 최대 5개의 포지션에 대한 능력치를 가질 수 있다.따라서 능력치가 0보다 큰 경우에 대해서만 탐색하면 된다. private static int bt(int sum, int i) { if (i == 11) { return sum; } int res = 0; for (int j = 0; j 0) { ..

[백준 16987] 계란으로 계란치기 [Python]

문제 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱걸이를 5회 하는 기적의 운동 루틴을 통해 뇌와 근육을 동시에 단련한다. 근육을 단련할 때 식단이 정말로 중요하다는 것을 아는 인범이는 탄수화물이 많은 밥이나 빵 따위의 아침 식사를 대신해 단백질이 많은 계란찜을 해먹는다. 계란찜을 먹기 위해서는 계란을 깨야 하는데, 인범이는 힘이 너무 넘치는 나머지 부엌의 대리석을 이용해 계란을 깨면 늘 껍데기가 산산조각나 뒷처리가 너무 어렵게 되곤 한다. 어떻게 하면 계란을 조심스럽게 깰 수 있을까 고민하던 인범이에게 유현이는 굉장히 좋은 해결책을 알려주었다. 바로 계..

[백준 14889] 스타트와 링크 [C/C++]

문제 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀이 N / 2명씩 두 팀을 이룰 때, 각 팀에 속하는 팀원들의 번호로 만들 수 있는 조합에 따른 능력치 합을 구해야 한다. 이때, 두 팀의 능력치 합에 대해 최대한 차이가 없도록 팀원을 정해야 한다. 만약 N명이 한 팀이라면, S[0][0] ~ S[N-1][N-1]이 그 팀의 능력치가 된다. 이 팀에서 2/N명을 제외시켜 새로운 팀을 만든다면, 새로운 팀의 팀원 번호와 조합 가능한 모든 S를 제외시키면 두 팀의 능력치의 합을 구할 수 있다. 따라서 각 팀의 번호와 조합 가능한 ..