목록국민대 교내 경시대회 (4)
주니어 개발자의 대나무숲
BOJ 13417 카드 문자열 (https://www.acmicpc.net/problem/13417) 이 문제는 한 면에 문자가 써 있는 카드를 왼쪽부터 하나씩 가져와 재배열하는데, 재배열한 카드들의 왼쪽 끝과 오른쪽 끝에만 카드를 놓을 수 있는 경우 사전순으로 가장 빠른 문자열이 되도록 재배열하는 문제입니다. 이 문제는 각각의 카드를 재배열할 때, 왼쪽 끝에 놓을 것인지 오른쪽 끝에 놓을 것인지를 판가름하는 기준이 무엇일지만 알면 쉽게 풀 수 있습니다. 예제로 나와있는 M,K,U에 대해 생각해 보겠습니다.M은 첫 번째 카드이므로 그냥 올려놓은 후, K를 추가할 때의 상황입니다. K를 M의 왼쪽에 올려놓아야 할까요 아니면 오른쪽에 올려놓아야 할까요? 답은 왼쪽입니다. 이유는 왼쪽에 올려놓는 경우와 오른쪽..
BOJ 13416 주식 투자 (https://www.acmicpc.net/problem/13416) 이 문제는 해당 날짜에 각 회사의 주식이 낼 수 있는 이익(양수)과 손해(음수)가 값으로 주어지고, 하루에 최대 한 회사의 주식만 구매할 수 있을 때(아무 회사의 주식도 구매하지 않을 수 있음) N일 동안 낼 수 있는 이익의 최댓값을 고르는 문제입니다. 최대 한 회사의 주식만 구매할 수 있고 구매할 수 있는 주식의 값에 제약 조건이 없으므로 매우 쉬운 문제입니다. 이익을 가장 많이 낼 수 있는 회사의 주식을 구매하되, 이익의 최댓값이 음수인 경우(모든 회사의 주식이 손해를 내는 경우)에는 아무 회사의 주식도 구매하지 않으면 전체 이익을 최대로 할 수 있습니다. 1234567891011121314151617..
BOJ 13414 수강 신청 (https://www.acmicpc.net/problem/13414) 이 문제는 C++ STL라이브러리의 map을 이용하므로, map에 대해 잘 모르신다면, 아래글을 참고해주세요!C++ STL라이브러리의 map, set(http://sarah950716.tistory.com/6) 해당 수업의 수강 가능 정원과 수강신청 버튼을 누른 학생의 학번이 순서대로 주어질 때, 수강신청에 성공한 학생들의 학번을 출력하는 문제입니다. (단, 동일한 학생이 수강신청 버튼을 두 번 이상 누른 경우 마지막에 누른 것만 유효처리됨) 이 문제는 단순한 구현 문제입니다. 단, 동일한 학생이 수강신청을 두 번 누른 경우, 마지막에 누른 것만 유효처리해야 하기 때문에 중복을 제거할 수 있는 자료구조를 ..
BOJ 13413 오셀로 재배치 (https://www.acmicpc.net/problem/13413) 앞면은 검정, 뒷면은 흰색으로 된 오셀로 말을 ① 임의의 2개의 말을 위치를 바꾸거나(인접한 말일 필요없음)② 말 1개를 뒤집어 색깔 변경 하는 작업 중 하나를 골라 시행할 수 있을 때, 초기 상태에서 목표 상태까지 도달할 수 있는 최소 작업 횟수를 구하는 문제입니다. 특정한 알고리즘을 사용하는 문제는 아니지만, 예시들을 통해 어떻게 말을 바꿔나가는 것이 최소 작업 횟수가 되는지를 생각하다 보면 방법을 알 수 있습니다. 제가 사용한 방법은 B여야 하는데 W인 말과, W여야 하는데 B인 말을 서로 모두 바꾼 후에(①) 아직 목표 상태에 도달하지 못한 말들을 각각 뒤집는(②) 방법입니다. 검정색에서 흰색이..