반응형

자료구조 및 알고리즘 104

[python] 1158. 요세푸스 문제

문제: https://www.acmicpc.net/problem/1158 풀이  리스트 회전을 구현하는 법을 알면 어려운 문제는 아니였습니다.# *** 으로 표시한 부분을 주의하여 구현하면 되는 문제입니다. # pop 해야 할 원소를 list의 가장 마지막으로 옮기고 pop = O(1)N, K = map(int, input().split())arr = [i for i in range(1, N+1)]idx = 0 # 제거될 사람의 인덱스 번호ans = []for i in range(N): idx = (idx + K-1) % len(arr) # *** ans.append(arr.pop(idx))ans[0] = ""print(*ans, sep= ', ')

[프로그래머스] level1. 크레인 인형뽑기 게임

문제:  https://school.programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 문제의 풀이는 아래의 두 가지가 있습니다.비슷한 방법입니다. 행렬을 transpose하는 것이 아니라, moves에서 인덱스 값을 받아와서 처리합니다. def solution(board, moves): nrow, ncol = len(board), len(board[0]) stack = [] cnt = 0 for m in moves: # [1,5,3,5,1,2,1,4..

코딩 테스트 완전 정복 ・ 스택

스택의 ADT라는 것을 정의해보고 실제 스택이 동작하는 원리를 설명해보겠습니다.ADT는 abstract data type (추상 자료형)입니다. 추상 자료형이란 인터페이스만 있고 실제로 구현은 되지 않은 자료형 입니다. 언어에 따라 표준 라이브러리에서 스택 제공 여부는 다릅니다. 파이썬의 경우 스택을 제공하진 않지만 대안으로 리스트 메서드인 append() 메서드, push() 메서드로 스택을 대체할 수 있습니다. deque은 한쪽으로만 데이터 삽입, 삭제 할 수 있는 스택과는 다르게 양쪽에서 데이터를 삽입하거나 삭제할 수 있는 자료구조 입니다. 스택의 ADT(연산과 상태)스택 세부 동작에 대해 자세히 알아보기 스택에 데이터를 추가하는 경우를 생각해봅시다. 푸시 연산을 수행할 때  스택 내부에서 일어나는..

[프로그래머스] level2. 방문 길이

문제: https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  풀이  중복 경로의 길이를 제외한 움직인 경로의 길이를 반환 ***1. 중복 경로는 최종 길이에 포함하지 않음 = 중복 포함하지 않을 때 set() 사용 고려2. 음수 좌표 포함하지 않음 = 2차원 배열에서 음수 인덱스 사용 안함원점을 (0,0)에서 (5,5)로 바꿔도 됨 def is_valid_move(dx, dy): # 좌표평면을 벗어나는지 체크하는 함수 return 0

코딩 테스트 완전 정복 ・ 배열

my_list = [1, 2, 3]my_list = my_list + [4, 5] # [1, 2, 3, 4, 5]배열 선언일반적인 방법 arr = [0, 0, 0, 0, 0, 0] arr = [0] * 6 리스트 생성자를 사용하는 방법arr = list(range(6)) # [0, 1, 2, 3, 4, 5] 리스트 컴프리헨션을 활용하는 방법 arr = [0 for _ in range(6)] # [0, 0, 0, 0, 0, 0]  2차원 배열리스트 컴프리헨션을 활용하면 다음과 같이 선언할 수도 있습니다.# 크기가 3 * 4인 리스트를 선언하는 예arr = [[i]*4 for i in range(3)] # [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2]]   1차원 배열이..

[프로그래머스] level1. 실패율

문제: https://school.programmers.co.kr/learn/courses/30/lessons/42889 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr   실패 코드 def solution(N, stages): answer = [] ans_dict = {} cnt = [0] * len(stages) # 나는 도전자를 이중for문을 돌면서 찾았는데 ... for i in range(len(stages)): # 0 1 2 3 4 5 6 7 for j in range(len(stages)): # 0 ..

[프로그래머스] level1. 모의고사

문제: https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 오늘의 문제는 level 1문제입니다. 1번 수포자, 2번 수포자, 3번 수포자는 찍는 방식이 반복적이며가장 정답을 많이 맞춘 사람을 배열에 담아 return하는 문제입니다. 문제는 어렵지 않습니다.다음과 같은 방법으로 문제를 해결하면 됩니다. 1. answer와 각 사람의 답변을 매칭하여 맞았을 경우 score +12. 가장 많이 맞춘 사람 구해서 배열에 넣고3. 배열(정답) 출력 ! ..

코딩 테스트 사전 지식 ・lambda 뿌시기

시간 복잡도(time complexity)알고리즘의 성능을 나타내는 지표로, 입력 크기에 대한 연산 횟수의 상한을 의미합니다. 시간 복잡도는 낮으면 낮을수록 좋습니다. 입력 크기에 따른 연산 횟수의 추이를 활용해서 시간 복잡도를 표현하는 방법을 점근적 표기법이라고 합니다.  코딩 테스트 필수 문법빌트인 데이터 타입(built-in data type)은 언어 자체에서 제공하는 데이터 타입과 컬렉션 데이터 타입이 있습니다.기본 데이터 타입: int, float, string컬렉션 데이터 타입: list, tuple, set, dictionary 정수형 비트 연산print(a & b) # AND / 4print(a | b) # OR / 13print(a ^ b) # XOR / 9print(~a..

다이나믹 프로그래밍

DP 사용조건- 큰 문제를 작은 문제로 나눌 수 있음- 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일함  탑다운(Top-Down) 방식- 작은 문제를 재귀적으로 해결d = [0] * 100 # 한 번 계산된 결과를 memoization하기 위한 list 초기화def fibo(x): # 피보나치 함수를 재귀함수로 구현 (탑다운) if x == 1 or x == 2: return 1 if d[x] != 0: # 이미 계산한 적 있는 문제라면 그대로 반환 return d[x] d[x] = fibo(x - 1) + fibo(x - 2) # 아직 계산하지 않은 문제라면 점화식에 따라 결과 반환 return d[x]print(fibo(99))  ..

정렬 ・ 이진 탐색

선택 정렬 - 매번 가장 작은 것을 선택하여 맨 앞과 교체하는 방법- 시간 복잡도: O(N^2)for i in range(len(array)): min_index = i for j in range(i+1, len(array)): if array[min_index] > array[j]: min_index = j array[i], array[min_index] = array[min_index], array[i]  삽입 정렬- 데이터를 하나씩 확인하며, 각 데이터를 적절한 위치에 삽입하는 방법- 시간 복잡도: O(N^2), 데이터가 정렬되어 있는 경우 O(N)for i in range(1, len(array)): for j in range(i, 0, -1)..

728x90
반응형