일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2 + 1 세일
- 키워드 암호화
- 그리디 알고리즘
- 사과 담기 게임
- 구현
- 비연결형 통신
- JoCoding
- 5와 6의 차이
- 컴퓨터 네트워크
- 나동빈
- 파이썬
- 거스름돈
- 욱제는 효도쟁이야!!
- 문자 변환표
- 백준
- 한빛미디어
- 동적 계획 알고리즘
- 대체 암호화
- ZOAC 2
- 통나무 건너기
- 전자 메일
- Greedy
- 시저 암호화
- 세탁소 사장 동혁
- Pop
- 컬럼 암호화
- 코딩 테스트
- DES 알고리즘
- 위치 암호화
- 소가 길을 건너간 이유3
- Today
- Total
목록그리디 알고리즘 (31)
주니어로서의 백 걸음, 개발자로서의 한 걸음

문제 풀이: 해당 문제는 하나의 문자를 입력받았을 때 유니코드 정수로 반환해 주는 함수인 ord() 함수를 사용해야 한다. ex) ord('a')를 넣으면 정수 97을 반환한다. 반대로 정수를 입력 받았을 때 유니코드 문자로 반환해 주는 함수인 chr() 함수도 있다. ex) chr(97) 을 넣으면 문자 'a'가 반환된다. 처음 화살표는 'A'를 가리키기 때문에 변수 first의 초기 값을 'A'로 설정한다. 문자를 하나씩 가져와서 왼쪽으로 돌려야 최소 값이 나오는지 오른쪽으로 돌려야 최소가 나오는지를 계산한다. a = input() first = 'A' cnt = 0 for i in a: left = ord(first) - ord(i) right = ord(i) - ord(first) if left ..

문제 풀이: 해당 문제는 모든 유치원생들을 한 조에 넣었다가, 인접한 아이들 중에서 키 차이가 가장 작은 아이들을 같은 조에 넣어주는 과정을 반복하면 된다. n, k = map(int, input().split()) l = list(map(int, input().split())) dif= [] for i in range(1, n): dif.append(l[i] - l[i-1]) dif.sort() for _ in range(k-1): dif.pop() print(sum(dif)) dif.pop()을 통해 인접한 유치원생들의 키 차이가 최소가 되도록 같은 조에 묶어주는 것이다.

문제 풀이: 해당 문제는 힌트를 안 보는 것이 좋다. 먼저 유제품을 내림차순으로 정렬하고 3번째, 6번째 ... 유제품을 계산하지 않으면 된다. n = int(input()) l = [] for _ in range(n): l.append(int(input())) l.sort(reverse=True) r = 0 for i in range(2, n, 3): r += l[i] print(sum(l) - r)

문제 풀이: 해당 문제는 3가지 경우로 나누어서 생각할 수 있다. 1. 사과가 d(현재 위치) ~ m(바구니 크기) - 1 사이에 떨어지는 경우 -> 움직일 필요가 없으므로 pass 2. 사과가 d보다 왼쪽에 있는 경우 -> 사과가 떨어지는 지점까지 바구니가 왼쪽으로 이동해야 함 3. 나머지 모든 경우 -> 현재 위치를 기준으로 m - 1이 사과가 떨어지는 지점까지 이동해야 함 n, m = map(int, input().split()) a = int(input()) apples = [] d = 1 result = 0 for _ in range(a): apples.append(int(input())) for apple in apples: if apple >= d and apple apple: result ..

문제 풀이: 해당 문제는 어려워서 다른 사람 블로그를 참고했다. https://whitehairhan.tistory.com/337 n = int(input()) l = [] for _ in range(n): a, b = map(int, input().split()) l.append((a, b)) l.sort() d = [] result = 0 for date in range(n, 0, -1): while l and l[-1][0] >= date: d.append(l.pop()[1]) if d: d.sort() result += d.pop() print(result) 풀이를 해보면 먼저 마감일과 점수를 튜플 형태로 l에 담는다. l을 정렬하면 마감일이 적은 수부터 오름차순으로 정렬한다. d는 해당 일수에 ..

문제 풀이: 해당 문제는 여러 블로그를 봤지만 알고리즘 이해가 잘 안 되어서 chatGPT한테 물어봤다... 먼저 통나무들을 정렬해 주고 i번째 통나무와 i - 2번째 통나무의 높이 차이를 구해서 max_diff(최대 높이 차이, 초기값 0)와 비교한다. 비교는 2번째 통나무부터 시작. i번째와 i-2번째 통나무를 비교하는 이유는 인접한 3개의 통나무들의 높이 차이를 비교하여 최솟값을 구할 수 있기 때문이다. T = int(input()) for _ in range(T): N = int(input()) logs = list(map(int, input().split())) logs.sort() max_diff = 0 for i in range(2, N): max_diff = max(max_diff, log..

문제 풀이: 해당 문제는 커플석 'LL'이 2개 이상인 경우에만 컵홀더를 못 쓰는 사람이 발생한다. 먼저 'LL'의 개수를 count에 저장하고 만약 count가 1개 이하라면 모두 컵홀더를 사용할 수 있고 count가 2개 이상이라면 전체 인원에서 count를 빼주고 1을 더해준다.(LLLLLL인 경우 6 - 3 + 1 = 4, 4명만 컵홀더 사용 가능) n = int(input()) m = input() count = m.count('LL') if count