반응형

분류 전체보기 125

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

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)..

주요 라이브러리 ・DFS ・BFS

내장 함수- evalresult = eval("(3+5) * 7") # 56 - sortedresult = sorted([9,1,8,5,4]) # [1,4,5,8,9]result = sorted([9,1,8,5,4], reverse=True) # [9,8,5,4,1]result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key=lambda x: x[1], reverse=True) # [('이순신', 75), ('아무개', 50), ('홍길동', 35)] - .sort(): 내부 값이 바로 변경됨data = [9,1,8,5,4] data.sort() # [1,4,5,8,9]   itertools- permutations(순열): 서로 다른 n개 중에 r개를 선..

[python] 1918. 후위 표기식

문제: https://www.acmicpc.net/problem/1918  풀이 오늘은 stack, queue, deque의 문제 유형인 후위 표기식을 풀어보겠습니다. 연산자 우선순위1. () 2. * /3. + - stack을 이용하여 연산자의 우선순위를 고려하여 문제를 해결해보도록 하겠습니다.  리스트에 식전체를 넣어 for문을 통해 한 문자씩 확인합니다.1. ()를 확인2. * / 인지를 확인하고, 먼저 들어온 같은 우선순위에 있는 * /는 모두 출력 문자열에 추가3. 현재 연산자를 stack에 추가4. + - 인지를 확인하고, + - 보다 낮은 우선순위의 연산자가 없기 때문에 자신보다 우선순위가 높은 연산자들을 모두 출력 문자열에 추가5. )를 발견하면 ( 와 ) 사이에 있는 모든 연산자들을 출력..

Queue・FIFO(First In First Out)

Queue 설명 먼저 들어온 데이터가 먼저 나가는 구조이다.선입선출(FIFO:First In First Out) 구조라고 한다. Stack은 한 쪽이 막혀있어 입구와 출구가 하나라면,Queue는 입구와 출구가 따로있다. Queue는 연결 리스트(linked list)로 구현이 되는데 python에서 queue 구현을 위해 deque() 함수를 제공한다.Import하여 쉽게 사용하면 된다.  List 자료구조가 있는데 왜 굳이 queue를 사용할까 ? Linked list는 제일 앞의 요소를 꺼낼 때 head 노드를 두 번째 노드로 바꾸고 head 노드였던 자료는 queue에서 빠져나온다. 이는 빅오 표기법에 따라 O(1)이라는 매우 빠른 연산이 가능하다. 하지만 array list는 순서대로 배열되어 있..

Stack ・LIFO(Last In First Out)

Stack 설명 Stack은 먼저 들어온 데이터는 제일 늦게 나가게 되고, 맨 마지막에 들어온 자료가 제일 먼저 나가는 자료구조이다.후입선출(LIFO: Last In First Out) 구조라고 한다. Stack은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있도록 제한된 선형으로 나열된 자료구조이다.  Python에서 stack의 자료구조는 배열 순서에 따른 배열 리스트(array list)와논리 순서에 따른 연결 리스트(linked list) 두 가지로 활용되는데,알고리즘 코딩테스트에서는 주로 배열 리스트(array list) 형식인 list 자료구조로 stack을 사용한다.  Stack 기본 연산Stack의 입출력은 .append() 리스트 제일 뒤에 데이터 입력과.pop() 리스트 제일 뒤에 데이터 출력..

728x90
반응형