본문 바로가기

알고리즘/대회

(7)
[대회][BOJ][INU 코드페스티벌 2021] C번 23843 : 콘센트 문제를 정리해보자. 1. N개의 전자기기를 충전해야 한다. 2. M개의 사용 가능한 콘센트가 있다. 전자기기 1개당 콘센트 1개가 필요하다. 그리고 전자기기마다 충전에 필요한 시간, T가 주어진다. 모든 전자기기를 충전하기 위한 최소 시간을 구해야 한다. 풀이를 생각해보자. 이 문제는 '최소 대기시간으로 충전해서 가져가는 최대 인원'을 구하는 게 아니라, '모든 기기를 충전하는 최소 시간'을 구하는 것이다. 문제의 예시로 전자와 후자를 비교해보자. 전자는 13시간이 걸리고, 후자는 9시간이 걸린다. 따라서 충전이 오래 걸리는 기기부터 충전해야 한다. 정리해보면, 넣을 때는 충전이 가장 오래 걸리는 기기를 넣는다. 그리고 콘센트 누적 충전 시간에 현재 기기 충전 시간을 더한다. (처음에는 0이다.) 그다음..
[대회][BOJ][INU 코드페스티벌 2021] B번 23842 : 성냥개비 문제를 정리해보자. 성냥개비를 이용해서 '올바른 수식'을 만들어야 한다. 올바른 수식이 되는 조건은 아래와 같다. 1. @@+@@=@@ 형태를 만족해야 한다. (모든 수는 항상 두 자릿수로 표현해야 한다. 예를 들면, 27은 27이다. 5는 05이다.) 2. N개의 성냥개비가 주어진다. 모두 사용해야 한다. (+와 =에도 각각 2개의 성냥개비가 필요하다.) 풀이를 생각해보자. 모든 경우의 수를 따져보면 된다. (0+0=0부터 99+99=99까지 완전 탐색한다.) 그리고 경우마다, 1. 수식이 성립하는가? 2. 수식이 N개의 성냥개비를 사용하는가? 를 따진다. 1, 2를 모두 만족하면 올바른 수식이다. 구현해보자. 숫자마다 사용되는 성냥개비 개수는 아래와 같다. 0은 6개 1은 2개 2는 5개 3은 5개 ..
[대회][BOJ][INU 코드페스티벌 2021] A번 23841 : 데칼코마니 문제를 정리해보자. N X M인 격자무늬의 사각형이 있다. N은 세로의 길이, M은 가로의 길이이다. 그리고 M은 짝수이다. 이 격자무늬 사각형의 칸에는 물감이 묻은 곳이 있다. 이 사각형을 반으로 접었을 때, 맞닿는 칸은 물감이 번진다. 번진 결과를 출력해야 한다. 풀이를 생각해보자. M이 짝수인 점이 중요하다. 만약 M이 6이고, N은 4라고 하자. 가로의 index를 보면 0 5 1 4 2 3 이렇게 맞닿게 된다. 즉, i (0
[대회][BOJ][INU 코드페스티벌 2020] D번 20365 : 블로그2 문제를 정리해 보자. 문제를 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한다. 각 문제를 칠할 때 아래와 같은 과정을 한 번의 작업으로 수행한다. 1. 연속된 임의의 문제들을 선택한다. 2. 선택된 문제들을 전부 원하는 같은 색으로 칠한다. 단순히 위에서 아래로 칠해보자. 횟수 번호 1 1,2 2 3 3 4 4 5 5 6,7 6 8 최소한의 작업 횟수로 수행해보자. 이를 구현해야 한다. 횟수 번호 1 1,2,3,4,5,6,7 2 3 3 5 4 8 어떻게 구현해야 할까? 아래 방법처럼 하면 된다. (아래는 다른 예시이다.) 연속된 동일 알파벳은 하나의 알파벳으로 본다. 즉, 중복을 제거한다. (중복이 제거되었기 때문에 R과 B가 교차로 있게 된다.) R의 개수와 B의 개수 중, 더 큰 것은 한 ..
[대회][BOJ][INU 코드페스티벌 2020] D번 20364 : 부동산 다툼 문제를 정리해보자. 1. 루트 땅의 번호는 1이다. 2. 어떤 땅의 번호가 K라면, 왼쪽 자식 땅의 번호는 2 x k, 오른쪽 자식 땅의 번호는 2 x (k + 1)이다. 1. 오리들은 한 줄로 대기시킨다. 맨 처음 오리들은 1번 땅에 있다. 2. 오리들이 서 있는 순서대로 원하는 땅을 가지도록 한다. 3. 오리가 원하는 땅까지 가는 길에 이미 다른 오리가 점유한 땅이 있다면 지나가지 못한다. 이 경우 처음 마주치는 점유된 땅의 번호를 출력한다. (지나가는 길에는 오리가 원하는 땅도 포함이다.) 4. 오리가 원하는 땅까지 간다면 0을 출력한다. 오리의 번호가 아래 식으로 루트 노드까지 간다. import sys input = sys.stdin.readline N, Q = map(int, input().s..
[대회][BOJ][INU 코드페스티벌 2020] C번 20363 : 당근 키우기 문제를 정리해보자. 1. 햇빛 1번은 온기 +1 2. 햇빛 10번은 온기 +10, 수분 -1 3. 물 1번 수분 +1 4. 물 10번 수분 +10, 온기 -1 수분과 온기는 음수가 될 수 없다. x, y = map(int, input().split()) if x < y: x, y = y, x print(x + (y // 10) + y) # y < x 이 문제는 처음에 얼마나 많은 햇빛 혹은 물은 주느냐가 관건이다. 예를 들어, 온기=10, 수분=10을 만들어야 한다고 하자. 최소한의 횟수로 만든다면 아래처럼 된다. 총 21회이다. 횟수/이름 온기 수분 1 0 0 2 10 0 3 9 10 4 10 10 하지만 다르게 생각해보자. 햇빛을 충분히 주어서 온기가 10보다 작은 상태를 만들지 않는다면 어떨까? 횟..
[대회][BOJ][INU 코드 페스티벌 2020] 후기 며칠 전 INU 코페 2021 대회에 참가 신청했고, 오늘 INU 코페 2020 문제를 풀어봤다. A~H번, 총 8문제가 출제되었다. 식사, 쉬는 시간까지 포함해서 약 6시간 풀었다. A, B, C, D, E번은 맞았고, F번은 틀렸다. G, H번은 접근하지 못했다. C, E는 쉬운 문제였다. 하지만 단순하게 생각하지 못하는 바람에 오래 걸렸다. B번은 시간 초과가 걱정되는 풀이로 해결했다. 왜 시간 초과가 안 났는지는 더 생각해볼 문제 같다. F번은 백 트래킹을 이용해서 풀었다. 하지만 시간 초과 문제를 해결하지 못해서 틀렸다. G, H번은 나중에 실력이 되면 풀어야겠다. (오늘 푼 문제 풀이는 따로 올렸다.) 교내 알고리즘 대회.. 아직 실력이 많이 부족하지만, 경험을 쌓기 위해 나간다. 선배들을 제..