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

문제 해설: 왕실의 나이트 문제는 앞서 다루었던 '상하좌우' 문제와 유사하다. 나이트가 이동할 수 있는 경로를 하나씩 확인하여 이동하면 된다. 다만, 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 =..
어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있다. N에서 1을 뺀다. N을 K로 나눈다. 예를 들어 N이 17, K가 4라고 가정하자, 이때 1번의 과정을 한 번 수행하면 N은 16이 된다. 이후에 2번의 과정을 두 번 수행하면, N은 1이 된다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 된다. 이는 N을 1로 만드는 최소 횟수이다. N과 K가 주어질 때, N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성해 보자. 입력 조건 첫째 줄에 N(2

숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 숫자가 쓰인 카드들이 N x M 형태로 놓여 있다. 이때 N은 행의 개수를 의미하며, M은 열의 개수를 의미한다. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 그다음 선택된 행에 포함된 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 따라서 처음에 카드를 골라낼 행을 선택할 때, 이후에 해당 행에서 가장 숫자가 낮은 카드를 뽑을 것을 고려하여 최종적으로 가장 높은 숫자의 카드를 뽑을 수 있도록 전략을 세워야 한다. 예를 들어 3 x 3 형태로 카드들이 다음과 같이 놓여 있다고 가정하자. 여기서 카드를 골라낼 행을 고를 때 첫 번째..
큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때 M이 8이고, K가 3이라고 가정하자, 이 경우 특정한 인덱스에 해당하는 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간주한다. 예를 들어 순서대로 3, 4, 3, 4, 3으로 이루어진 배열이 있을 때 M이 7이고, K가 2라고 가정하자..
반복문 for문 for 문의 기본 구조 리스트 = [1, 2, 3] for 변수 in 리스트 (또는 튜플, 문자열): print(변수) 1 2 3 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 안에 있는 요소를 하나씩 반복한다. 다른 언어의 for each 문과 비슷하다!!! 1. 전형적인 for문 test_list = ['one', 'two', 'three'] for i in test_list: print(i) one two three test_list 리스트의 첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i) 문장을 수행한다. 다음에 두 번째 요소 'two'가 i변수에 대입된 후 print(i)문장을 수행하고 리스트의 마지막 요소까지 이것을 반..
집합 자료형 set 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형 집합 자료형 #빈 집합 자료형 선언 >>>s = set() # 원소가 있는 집합 자료형 선언 >>>s1 = set([1, 2, 3]) >>>s2 = set({1, 2, 3}) >>>s3 = {1, 2, 3} 모두 같은 집합을 만든다. #집합 자료형 연산 >>>s1 = set([1, 2, 3, 4, 5]) >>>s2 = set([3, 4, 5, 6, 7]) >>>print(s1 & s2) # 교집합 {3, 4, 5} >>>print(s1 | s2) # 합집합 {1, 2, 3, 4, 5, 6, 7} >>>print(s1 - s2) # 차집합 {1, 2} #set()괄호 안에 문자열 입력 >>>s2 = set("Hello") >>>s2 {..