BOJ 136

BOJ 2630 - 색종이 만들기

문제https://www.acmicpc.net/problem/2630  풀이분할 정복으로 문제를 해결한다 (0~n, 0~n) 구역이 모두 같은 색이면 해당 색깔의 종이 수를 1 더하고 함수를 종료한다모두 같은 색이 아니라면 다음 4구역으로 나눈 후 각 구역에서 모두 같은 색인지 확인한다(0~n/2, 0~n/2)(n/2~n, 0~n/2)(0~n/2, 0/2~n)(n/2~n, n/2~n)  코드python1234567891011121314151617181920212223242526272829def solve(y, x, n):    global white, blue    reference_color = color_paper[y][x]     for i in range(y, y + n):        for j..

BOJ/미해결 2024.08.20

BOJ 2477 - 참외밭

문제https://www.acmicpc.net/problem/2477  풀이육각형의 빈 공간을 채워서 큰 직사각형의 넓이를 구한 후, 빈 공간의 직사각형의 넓이를 구해서 빼준다 입력에서 방향이 1번만 나오는 가로와 세로 길이가 가장 긴 길이다이를 이용해서 빈 공간을 채웠을 때 가장 큰 직사각형의 넓이를 구한다 빈 공간의 직사각형 넓이는 다음을 이용해 구한다가장 긴 가로 길이 인덱스에서 +3을 하면 빈 공간의 세로 길이 인덱스가 나온다가장 긴 세로 길이 인덱스에서 +3을 하면 빈 공간의 가로 길이가 나온다이를 이용해서 빈 공간에 직사각형의 넓이를 구할 수 있다  코드python12345678910111213141516171819202122232425directions = []lengths = []max_a..

BOJ/미해결 2024.08.19

BOJ 1489 - 대결

문제https://www.acmicpc.net/problem/1489  풀이그리디 문제다 a[i]의 값보다 작은 수가 b에 존재한다면, 그 중에서 가장 큰 값을 이겨야 한다그래야 무승부를 최대한 적게 가져가면서 승리를 최대한 많이 가져가고, 점수를 최대한 많이 가져갈 수 있다 구현은 먼저 승리하는 경우의 점수를 더하고, 마지막에 무승부하는 경우에 점수를 더한다  코드python123456789101112131415161718192021222324252627282930313233343536result = 0csort_a = [0] * 1002csort_b = [0] * 1002 n = int(input())a = [int(x) for x in input().split()]b = [int(x) for x i..

BOJ/미해결 2024.08.17

BOJ 1071 - 소트

문제https://www.acmicpc.net/problem/1071  풀이그리디 문제다사전 순으로 가장 앞선 것을 출력하기 위해 배열이 오름차순으로 정렬되어야 한다이를 위해 계수정렬을 통해 배열을 정렬한다 다음 규칙을 적용한다a[i] 값에 대하여1. a[i] + 1 값이 배열에 존재하면1-1. a[i] + 2 이상의 값 k가 배열 안에 존재하면, a[i] 값을 전부 출력하고 k를 출력한다1-2. a[i] + 2 이상의 값이 배열 안에 존재하지 않으면, a[i] + 1 값을 한번 출력한다 2. a[i] + 1 값의 배열에 존재하지 않는다면 a[i] 값을 전부 출력한다  코드python12345678910111213141516171819202122232425262728293031323334353637383..

BOJ/미해결 2024.08.16

BOJ 11729 - 하노이 탑 이동 순서

문제https://www.acmicpc.net/problem/11729  풀이재귀를 이용해 문제를 해결한다1. 가장 큰 원판 n은 맨 밑에 있어야 하므로 n-1개를 첫 번째 장대에서 두 번째 장대로 옮긴다2. 원판 n을 첫 번째 장대에서 세 번째 장대로 옮긴다3. 원판 n-1개를 두 번째 장대에서 세 번째 장대로 옮긴다 원판을 옮겨야 하는 총 횟수는  2ⁿ-1 이다 재귀함수에서 2ⁿ으로 자기 자신을 호출하고 n == 1일 때 한 번만 호출하므로 -1을 해준다  코드python12345678910111213def hanoi(n, src, aux, dest):    if n == 1:        print(src, dest)    else:        hanoi(n - 1, src, dest, aux)..

BOJ/미해결 2024.08.15

BOJ 1083 - 소트

문제https://www.acmicpc.net/problem/1083  풀이그리디 문제다 사전 순으로 뒤에 서기 위해 왼쪽에서 오른쪽으로 갈수록 수가 작아져야 한다왼쪽에서 오른쪽으로 순회한 인덱스를 기준으로 오른쪽에 있는 수 중 남은 s번을 교체해서 가져올 수 있는 최댓값을 매순간 바꿔주면 된다 연속된 수만 교체할 수 있는데, 이는 인덱스 차이가 남은 s 이하라면 바로 바꿀 수 있다는 것을 의미한다- s가 3일 때 3과 5의 위치를 바꾼다 -> 5 3 1 2 4, s = 2                    1과 4의 위치를 바꾼다 -> 5 3 4 1 2, s = 0  코드python123456789101112131415161718192021222324252627n = int(input())arr = l..

BOJ/미해결 2024.08.10

BOJ 1931 - 회의실 배정

문제https://www.acmicpc.net/problem/1931  풀이그리디 문제다 1. 회의가 끝나는 시간이 빠를수록 더 많은 회의를 고를 수 있다2. 회의가 끝나는 시간 이후부터 가장 빨리 시작되는 회의를 골라야 한다 이를 위해 끝나는 시간이 작은 순서대로 오름차순 정렬을 한다만약 끝나는 시간이 갔다면 시작 시간이 작은 순서대로 또 오름차순 정렬을 한다  코드python12345678910111213141516171819meet = []answer = 0endTime = 0 n = int(input()) for _ in range(n):    begin, end = map(int, input().split())    meet.append([begin, end]) meet.sort(key= ..

BOJ/미해결 2024.08.09

BOJ 1541 - 잃어버린 괄호

문제https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.www.acmicpc.net  풀이55-50+40 에서 55-(50+40)으로 괄호를 씌우면 최소값인 -35가 나오게 된다. 이 때 ()를 전개해서 표현하면 '+' 기호는'-' 기호로 바뀌어서 55-50-40이 된다. 이 원리를 이용해서 첫 번째 '-' 이후에 나오는 모든 '+' 기호를 '-'로 치환하면 최소값이 나오게 된다.   1. 첫 숫자부터 -가 나오기 ..

BOJ/미해결 2024.08.08

BOJ 1715 - 카드 정렬하기

문제https://www.acmicpc.net/problem/1715  풀이오름차순으로 정렬해서 더하면 되는 그리디 문제다이때 주의할 점은 작은 수끼리 더한 값도 다시 리스트에 넣어서 오름차순으로 정렬해야 한다우선순위 큐를 이용하면 최소값을 O(1) 시간 만에 찾을 수 있고, 오름차순으로 정렬하는 데 O(log n) 만큼 걸리므로 문제를 해결할 수 있다  코드python12345678910111213141516171819import sysimport heapq heap = []sum = 0 n = int(sys.stdin.readline()) for _ in range(n):    card_size = int(sys.stdin.readline())    heapq.heappush(heap, card_si..

BOJ 2024.08.06