본문 바로가기

전체 글195

[이것이 코딩테스트다] Chpter 05 DFS/BFS 탐색 - 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조 - 데이터를 표현하고 관리하고 처리하기 위한 구조 삽입 : 데이터를 삽입한다 삭제 : 데이터를 삭제한다. 스택 - First IN Last Out 나중에 들어온 것이 먼저 빠짐. 샌드위치 구조 stack = [] stack.append(4) stack.pop() 큐 - First In First Out ex. 놀이공원 처음에 들어온 사람이 먼저 나감 queue = deque() queue.append(5) queue.popleft() print(queue) -> 먼저 들어온 순서대로 출력 queue.reverse() -> 역순으로 바꾸기 재귀 함수 자기 자신을 다시 호출하는 함수 DFS 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 .. 2024. 3. 20.
[이것이 코딩테스트다] Chapter 2. 구현 - 실전문제 / 게임 개발 현민이는 게임 캐릭터가 맵 안에서 움직이는 시스템을 개발 중이다. 각각의 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 캐릭터는 상화좌우로 움직일 수 있고, 바다로 되어 있는 공간에느 갈 수 없다. 움직임을 설정하기 위해 정해 놓은 메뉴얼은 이러하다. 1. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 갈 곳을 정한다. 2. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 왼쪽으로 한 칸을 전진한다. 왼쪽 방향에 가보지 않은 칸이 없다면, 왼쪽 방향으로 회전만 수행하고 1단계로 돌아간다. 3. 네 방향 모두 가본 칸이거나 바다로 되어 있는 칸이면, 바라보는 방향을 유지한 채로 한 칸 뒤로 가고 1단계로 돌아간다. 단, 이때 뒤쪽 .. 2024. 3. 18.
[이것이 코딩테스트다] Chapter 2 구현 실전문제 왕실의 나이트 실전문제 - 왕실의 나이트 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 이동하는 법 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 나이트의 위치가 주어졌을 때 , 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램 입력예시 : a1 출력예씨 : 2 나이트의 이동 경로를 steps 변수에 넣는다면 위 규칙에 따라 8가지 경우의 수를 정의할 수 있다. 각 8가지 방향에 대하여 각 위치로 이동이 가능한 지 확인한다. # 현재 나이트의 위치 입력받기 input_data = input() row = int(input_data[1]) # 열 column = int(ord(in.. 2024. 3. 18.
[프로그래머스] 완전탐색 - 카펫 나의 답 def check(brown, yellow,x,y): b = x*y-((x-2)*(y-2)) y = (x-2)*(y-2) if brown == b and yellow == y: return 1 else: return 0 def solution(brown, yellow): cnt = brown+yellow arr = [] for i in range(3,cnt+1): # 약수 구하기 if cnt%i==0: arr.append(i) for value in arr: # 약수 조합 활용 x = value y = int(cnt/value) if check(brown, yellow,x,y): # 가로, 세로 값에 따라서 brown, yellow 충족 확인 return [x,y] if x>y else [y, .. 2024. 3. 18.
[프로그래머스] 완전탐색 - 최소직사각형 나의 답 - 결국은 못풀..었..다. ㅠ def check(filter_list,value): for i in filter_list: if value[1] i[1]: return 0 return 1 def solution(sizes): karo = [] sero = [] for edges in sizes: karo.append(edges[0]) sero.append(edges[1]) karo.sort(reverse=True) sero.sort(reverse=True) i=1 max_k=karo[i] max_s=sero[i] answer = max(karo)*max(sero) #가로 중에 젤 큰 값, 세로 중에 젤 큰 값 for i, value in enumerate.. 2024. 3. 18.
[이것이 코딩테스트다] Chapter 2. 구현 코딩테스트에서 구현이란 '머리속에 있는 알고리즘을 소스코드로 바꾸는 과정'이다. 예제 4-1 상하좌우 첫째 값 : 공간의 크기를 나타내는 N 둘째 값 : 여행가 A가 이동할 계획서 내용 입력 예시 5 R R R U D D 출력 예시 3 4 답안 예시 n = int(input()) x, y = 1, 1 plans = input().split() # L, R, U, D에 따른 이동 방향 dx = [0,0,-1,1] dy = [-1,1,0,0] move_types = ['L','R','U','D'] # 이동 계획을 하나씩 확인 for plan in plans: # 이동 후 좌표 구하기 for i in range(len(move_types)): if plan == move_types[i]: nx = x + dx.. 2024. 3. 16.