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

문제 해설: 왕실의 나이트 문제는 앞서 다루었던 '상하좌우' 문제와 유사하다. 나이트가 이동할 수 있는 경로를 하나씩 확인하여 이동하면 된다. 다만, 8 x 8 좌표 평면을 벗어나지 않도록 꼼꼼하게 검사하는 과정이 필요하다. 나이트는 2가지 경로로 움직일 수 있다고 했다. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 a = input() row = int(a[1]) column = int(ord(a[0])) - int(ord('a')) + 1 steps = [(2, -1), (2, 1), (-2, -1), (-2, 1), (1, -2), (1, 2), (-1, -2), (-1, 2)] result = 0 for step in steps: ne..

문제 해설: 이 문제는 시각을 1씩 증가시키면서 3이 하나라도 포함되어 있는지 확인하면 된다. 전체 시, 분, 초에 대한 경우의 수는 24 x 60 x 60이며 3중 반복문을 이용해 계산할 수 있다. 이러한 유형은 완전 탐색 유형으로 분류되기도 한다. 일반적으로 완전 탐색 알고리즘은 비효율적인 시간 복잡도를 가지고 있으므로 데이터 개수가 큰 경우에 정상적으로 동작하지 않을 수 있다. 그래서 일반적으로 알고리즘 문제를 풀 때는 확인(탐색) 해야 할 전체 데이터의 개수가 100만 개 이하일 때 완전 탐색을 사용하면 적절하다. 다음 소스코드에서는 매 시각을 문자열로 바꾼 다음 문자열에 '3'이 포함됐는지 검사한다. 다시 말해 00시 00분 00초부터 23시 59분 59초까지 1초씩 늘리며 시, 분, 초를 문자..

문제 해설: 이 문제의 연산 횟수는 이동 횟수에 비례하게 된다. 예를 들어 이동 횟수가 N번인 경우 시간 복잡도는 O(N)이다. 따라서 이 문제의 시간 복잡도는 매우 넉넉한 편이다. 해당 문제는 이동 방향에 따라서 dx, dy의 값을 올바르게 매치시켜야 한다. 예를 들어 이동 방향이 R이라면 dx값은 그대로이고 dy값은 1이 더해진다. 따라서 이동 방향에 맞춰서 dx, dy의 배열을 정렬해 준다. n = int(input()) plans = input().split() dx = [0, 0, -1, 1] dy = [-1, 1, 0, 0] move = ['L', 'R', 'U', 'D'] x, y = 1, 1 for plan in plans: for i in range(len(move)): if plan =..

문제 풀이: 해당 문제는 하나의 문자를 입력받았을 때 유니코드 정수로 반환해 주는 함수인 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는 해당 일수에 ..