코딩테스트 기록 11

코딩테스트 정렬에 관하여 정리 (Java)

1. primitive type(원시 자료형) 배열의 정렬과 Wrapper Class배열의 정렬은 다르다. 예시를 살펴봅시다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] arr = new int[N]; for(int i = 0; i < N; i++){ arr[i] = Integer.parseInt(br.readLine()); } Arrays.sort(arr); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); for(int i = 0; i < N; ..

알고리즘 - 재귀란?

❗ 학습 키워드 코드 1 def look_for_key(main_box): pile = main_box.make_a_pile_to_look_through() while pile is not empty: box = pile.grab_a_box() for item in box: if item.is_a_box(): pile.append(item) elif item.is_a_key(): print("열쇠를 찾았어요!") 코드 2 def look_for_key(box): for item in box: if item.is_a_box(): look_for_key(item) elif item.is_a_key(): print("열쇠를 찾았어요!") 이 코드들은 같은 일을 하는 함수를 구현한 것이다. 함수 1은 반복문으로..

[백준] 4949: 균형잡힌 세상 (Pyhton)

4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net 1. 문제 접근 방식 보통 이런 문제는 스택을 이용한 풀이가 정석이다. 2. 문제 풀이 - 스택 사용 blank = ['(', '['] def check_len(stack): if len(stack) > 0: return True return False while True: S = input().rstrip() if S == '.': break else: stack = list() for i in S: if i == ')': if check..

[백준] 1966: 프린터 큐 (Pyhton)

1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 1. 문제 접근 방식 큐를 이용하고, 문제의 조건에 충실하여 시뮬레이션 했다. 그러다보니 조금 코드가 길어진 감도 있긴한데, 직관적이어서 보기는 좋은거같다. 2. 풀이 코드 from collections import deque def solution(N, M, im): queue = deque() answer = 0 find = '' count = 1 for i in range(0, N): if i == M: find = chr(ord('A') + i) D = {c..

[백준] 11866: 요세푸스 문제 0 (Python)

11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제보고 이게 먼소린가 싶다냐.. 해서 그려보았다. 문제 분석할때 종이에 슥슥 써보는건 좋은습관인거 같다. 이렇게 그려보니까 무슨 문제인지 바로 파악이 되었다.( 악필 죄송 합니다 ) 그리고 이 문제를 해결하기 위해선 큐를 사용하는게 효율적이라는 것도 깨닫게 되었다. 큐를 사용해서 K와 다른 숫자는 다시 뒤로 append하고, 그 수만 pop한다음에 리스트에 추가하면 수열이 완성되는 방식이었다. FIFO인 큐 자료구조를 문제에 해결방식으로 떠올려서 그걸 이용해 문제를 해결하는게 핵심이었던거 같다. from collections import dequ..

코딩테스트 기본 자료구조(Python) - 딕셔너리

✍학습 키워드 딕셔너리? 사전이라는 의미이며, 데이터를 키(key) : 값(value) 형식으로 저장할 수 있는 자료구조이다. 키 값은 immutable 객체 타입이 와야한다. 키 값은 중복될 수 없다. 동일한 키를 추가하면 기존의 키와 값이 나중에 추가된 키와 값으로 변경된다( 이건 몰랐지! ) 📝새로 배운 개념 활용법 딕셔너리 values의 합 구하기 D = dict() for each in lists: D[each] = 23 answer = sum(D.values()) # value의 값이 합쳐서 리턴된다. 딕셔너리 정렬방법 # 1. sorted와 items() 이용 D = dict() D1 = dict(sorted(D.items())) #2. 람다 이용 answer = list(D.items())..

파이썬 코테 라이브러리 정리

✍학습 키워드 1. itertools 라이브러리 ⇒ 순열과 조합을 쉽게 구현할 수 있는 라이브러리. from itertools import permutations x = ['a', 'b', 'c'] y = list(permutations(x, 2)) print(y) #[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')] permutations 함수는 ‘a’, ‘b’, ‘c’에서 2개를 뽑아 나열하는 모든 순열을 리턴해준다. from itertools import combinations x = ['a', 'b', 'c'] y = list(combinations(x, 2)) #[('a', 'b'), ('a', 'c'), ('b', ..

[백준] 1292 쉽게 푸는 문제 (Python)

1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 배열 기본문제 생각나는대로 풀다보니까 코드가 길어진 감이 있다. 문제의 요구사항에 맞게 주욱 늘려쓴 느낌이다. A, B = map(int, input().split()) su = list() cnt = 0 i = 1 total = 0 su.append(0) for idx in range(1001): su.append(i) cnt += 1 if cnt == i: cnt = 0 i += 1 for i in range(A, B + 1): total += su[i] print(total)

[백준]11279 최대힙 (Python)

11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 본 코드는 파이썬으로 작성되었습니다. 우선순위 큐 라이브러리를 이용하였습니다. 파이썬의 우선순위 큐는 최소기반 힙으로만 작동하지만, put시에 음수로 반전하여 넣고, 꺼낼시에 다시 양수로 전환하여서 사용하면 최대 힙 방식으로 이용할 수 있습니다. 우선순위 큐의 시간복잡도는 n log n 이므로 우선순위를 사용하고 배열을 사용하지 않는 문제에 적합하다 생각됩니다. from queue import PriorityQueue import sys N..

[백준] 1931 회의실 배정 (Python)

1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 본 코드는 파이썬으로 작성되었습니다. 그리디 스러움으로 문제를 해결한다는 것이 뭔지 알게된 좋은 문제라고 생각합니다. 이 문제는 1. 회의가 일찍 끝나며, 2. 끝나는 시간이 같은 경우에는 일찍 시작하는 회의 순으로 리스트를 정렬 해 주는 것이 키포인트 였다고 생각합니다. N = int(input()) arr = [[0 for j in range(2)] for i in range(N)] for i in range(0, len(arr)): arr[i][0], arr[i][1] = map(int, input().split()) arr.sort(key=lambda x: (x[1], ..