코딩테스트 56

코딩테스트에서 사용할만한 정렬기법

정렬 기술 📌sort 메서드 오름 차순 정렬 리스트에는 기본 내장된 sort 메서드가 존재한다. 이를 사용하면 쉽게 정렬이 가능하다. list1 = [7,1,5,3,2,4,6] list1.sort() print(list1) # [1, 2, 3, 4, 5, 6, 7] 내림 차순 정렬 list1 = [7,1,5,3,2,4,6] list1.sort(reverse = True) print(list1) # [7,6,5,4,3,2,1] 📌특정 조건으로 정렬하기 단순한 크기순 정렬이 아니라 특정 조건으로 정렬하려면 어떻게 해야 할까? 예를 들어 딕셔너리 경우 key와 value로 자료형이 구성되어 있다. 그 중 value로 정렬하려면 다음과 같은 방법을 이용할 수 있다. 정렬의 기준이 되는 함수를 정의한다. 정의한 ..

리스트 컴프리헨션으로 가독성 높이기

📌for문 대체하기 리스트를 정의할 때 for 루프를 대체하는 방식이다. 리스트에 1부터 100까지 for문으로 서넌 list1 = [] for i in range(1, 101): list1.append(i) 벌써 3줄이나 사용해야 한다. 리스트 컴프리헨션은 이를 대체할 수 있는 방법이다. list1 = [x for x in range(1,101)] 리스트 컴프리헨션을 더 쉽게 이해한 방법은 뒤의 for문을 먼저 작성하는 것이다. x를 1부터 100까지 loop를 돌고, 그 때마다 x를 리스트 요소에 추가한다. if문이 들어간 리스트 컴프리 헨션도 같은 방식이다. 📌if문 포함 만약 1부터 100까지 짝수만 리스트에 추가하고 싶을 땐 어떨까? list1 = [x for x in range(1,101) i..

백준 2164(카드분류2) 문제풀이

📌문제 설명 📌문제 접근 방식 첫 번째 시도 아무생각 없이 시도했다가 시간 초과가 떴다. 문제를 접근한 방식은 다음과 같았다. 1. 첫 번째 카드를 제거한다. 2. 두 번째 카드를 맨 뒤로 보낸다. 위 두 과정을 1장이 남을때까지 수행하면 되는 문제라고 생각했다. 따라서 리스트를 사용했고 맨 앞에 카드를 삭제하고 뒤로 보내도록 구현했다. 문제가 없을거라 생각했던 이유 두 가지이다. 1. 1중 for문을 사용했다. 2. 최대 가드 수가 50만장이다. 소스코드 # 2초 초과 - N 500000으로 대입 시 79초가 걸렸다. # 병목 지점은 어디지? import sys n = int(sys.stdin.readline().rstrip()) cards = [x for x in range(1,n+1)] def so..

알고리즘 2021.03.12

백준 1259번 : 팰린드롬이란?

📌문제 설명 팰린드롬이란? 팰린드롬이란 앞에서 읽으나 뒤에서 읽으나 똑같은 단어를 말합니다. 📌문제 접근 방식 이 문제는 입력받은 값을 문자열로 바꾼 뒤 뒤집어주기만 하면 되는 간단한 문제였습니다. 📌문제 해결 및 소스코드 import sys def solution(): while True: input_value = str(sys.stdin.readline().rstrip()) if input_value == '0': break target_value = input_value[::-1] if input_value == target_value: print("yes") else: print("no") return 0 solution()

알고리즘 2021.03.09

백준 1920번[수찾기] 문제풀이

문제 설명 📌문제 접근 방법 처음에 간단히 생각했던 방법은 '빈 리스트에 B가 A에 있으면 1, 없으면 0을 저장하자'였습니다. 1. 빈 리스트 생성 2. B가 A에 있다면 1, 없으면 0 리턴 📌1차 오답 소스코드 import sys M = int(sys.stdin.readline().rstrip()) A = list(map(int, sys.stdin.readline().rstrip().split())) N = int(sys.stdin.readline().rstrip()) B = list(map(int, sys.stdin.readline().rstrip().split())) def solution(A, B): res = [] for x in B: if x in A: res.append(1) else: ..

알고리즘 2021.03.07

백준 1181번[단어 정렬] 문제풀이

📌문제 설명 📌문제 접근 방식 1. 중복된 단어를 제거한다. 2. 글자 수로 정렬 후 알파벳 사전순으로 정렬한다. 📌몰랐던 점 sorting 기준을 lambda식으로 정의할 때 2가지 기준을 설정할 것 중복된 단어를 제거하는 건 set 자료구조를 사용해 간단히 해결할 수 있었다. 2단계에서 글자 수로 정렬하는 것도 문제없이 수행했으나 알파벳 사전순으로 정렬하는 과정에서 헷갈렸던 부분은 문자열 정렬을 어떻게 할 것인가였다. lambda 식을 이용해 정렬할 때 2개의 기준을 주고 싶었는데 문법이 기억나지 않았다. 그래서 직접 문자열 정렬을 하는 함수로 구현하다보니 시간이 오래걸렸다. sort함수의 key파라미터로 lambda 식을 넘겨줄 때 글자수와 문자열을 설정하면 간단한 문제였다. 📌소스코드 import..

알고리즘 2021.03.06