목록전체 글 (102)
컴공생 누르지 마세요! 컴공생 울어요.
1. 스택 LIFO (Last In First Out) 구조: 나중에 넣은 게 가장 먼저 나옴 (ex. 박스 쌓기) 기본 리스트에서 append()와 pop() 메서드를 이용하여 스택 자료구조 구현 가능 append() - 리스트의 가장 뒤쪽에 데이터 삽입 pop() - 리스트이 가장 뒤쪽에서 데이터를 꺼냄 stack = [] stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(1) stack.append(4) stack.pop() print(stack) # 최하단 원소부터 출력 print(stack[::-1]) # 최상단 원소부터 출력 # 실행결과: # [5, 2, 3, 1] # [1, 3, 2,..
이코테 p.118 실전 문제 - 게임 개발 내 소스 코드 # 입력 받기 N, M = map(int, input().split()) A, B, d = map(int, input().split()) map_data = [] for i in range(N): line_data = list(map(int, input().split())) map_data.append(line_data) directions = [0, 1, 2, 3] dx = [0, 1, 0, -1] dy = [-1, 0, 1, 0] result = 1 # 가본 칸 수 left_cnt = 0 # 왼쪽으로 회전한 횟수 while True: # 현재 방향 기준으로 왼쪽 방향 확인 left = directions[d - 1] nx = A + dx[lef..
이코테 p.115 실전 문제 - 왕실의 나이트 내 소스코드 상하좌우 각각에 대하여 2칸 이동할 수 있는지 확인 상하로 이동했다면 좌우로 1칸 이동할 수 있는지 확인 좌우로 이동했다면 상하로 1칸 이동할 수 있는지 확인 data = input() row = data[:1] # 알파벳 col = int(data[1:]) # 숫자 result = 0 if 3
구현 알고리즘은 쉽게 떠오르는데, 막상 코드로 작성하기 까다로운 문제 유형 시뮬레이션, 완전 탐색 등 문법만 잘 숙지한다면 난이도가 낮은 편 이코테 p.110 예제 4-1 상하좌우 내 소스코드 R, L, U, D에 따라서 행, 렬 좌표를 +1 혹은 -1 하는 방식으로 소스코드를 작성함. 만약 N x N 범위를 벗어날 경우 이동이 무시되도록 함. N = int(input()) data = list(input().split()) col = 1 row = 1 # R은 row + 1 # L은 row - 1 # U은 col - 1 # D은 col + 1 for i in range(len(data)): if data[i] == 'R' and (row + 1) = 1: row -= 1 elif data[i] == '..
이코테 p.99 실전 문제 - 1이 될 때까지 내 소스코드 지금 당장 N이 K로 나누어 떨어지면 나누고, 그렇지 않으면 1을 빼는 방식 import sys N, K = map(int, sys.stdin.readline().rstrip().split()) cnt = 0 while True: if N == 1: # N이 1이 되면 반복문 종료 break # N이 K로 나누어 떨어지지 않으면 1 빼기 if (N % K) != 0: N -= 1 # N이 K로 나누어 떨어지면 나누기 else: N /= K cnt += 1 print(cnt) 교재 소스코드 ver.1 - 간단한 답안 그리디 알고리즘 기반으로, 주어진 N에 대하여 최대한 많이 나누기 어떠한 수가 있을 때, 2 이상의 수로 나누는 것이 1을 빼는 것보..
이코테 p.96 실전 문제 - 숫자 카드 게임 내 소스코드 각 행의 가장 작은 수 중에서 가장 큰 수를 구하는, 그리디 알고리즘 적용 import sys N, M = map(int, sys.stdin.readline().rstrip().split()) data = [] for n in range(N): data.append(list(map(int, sys.stdin.readline().rstrip().split()))) maximum = 0 # 각 행의 가장 작은 수 중 가장 큰 수 구하기 for n in range(N): # 각 행의 가장 작은 수 구하기 minimum = data[n][0] for m in range(M): if minimum > data[n][m]: minimum = data[n][..
이코테 p.92 실전문제 - 큰 수의 법칙 내 소스코드 (for문 이용) import sys N, M, K = map(int, sys.stdin.readline().rstrip().split()) data = list(map(int, sys.stdin.readline().rstrip().split())) # 내림차순 정렬 data.sort(reverse = True) result = 0 cnt = 0 for m in range(M): if cnt < K: result += data[0] else: result += data[1] cnt = 0 cnt += 1 print(result) 그리디 알고리즘을 이용하여 가장 큰 수를 K번 더하고, 두 번째로 큰 수를 1번 더하는 과정을 반복하면 배열로 주어진 수들..
그리디 알고리즘 '탐욕법' 현재 상황에서 지금 당장 좋은 것만 고르는 방법 매 순간 가장 좋아 보이는 것을 선택하며, 현재의 선택이 나중에 미칠 영향은 고려 X 사전 지식이 없어도 풀 수 있음 그리디 알고리즘 유형의 문제는 매우 다양 ➡️ 많은 유형 접해보기 기준에 따라 좋은 것을 선택하는 알고리즘 문제에서 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준을 제시해줌 자주 정렬 알고리즘과 짝을 이뤄 출제 그리디 알고리즘 예제 - 거스름돈 이코테 p.87 예제 3-1 정답 소스코드: import sys N = int(sys.stdin.readline().rstrip()) cnt = 0 # 큰 단위의 화폐부터 차례대로 확인 coin_types = [500, 100, 50, 10] for coin i..