파이썬/코딩테스트
[파이썬]코딩테스트 04 정렬_기본정리
by nemonemonemo
2025. 8. 5.
정렬
- 코테용 vs 실제 대면 면접 → 기본적인 내용들과 차이점이 있음
- 코테용
- 정렬 관련 개별 알고리즘이 주된 내용은 아님
- 정렬만 내는 문제는 거의 없음 → 마지막에 출력을 할 때…사용됨 (~하게 정렬하시오) → 아니면 중간에 처리할 때 1 ~2줄 정리
- 핵심
- 내가 원하는대로 정렬 규칙 세팅
- 필요한 자료형 구성/ 설정 할 수 있어야
- ⇒ 정렬을 하기 위한 필요한 정보들을 어떻게 세팅할 것인가를 연결해서 봐야함
- 실제 대면 면접
- 기본적인 정렬 알고리즘 차이점을 묻거나 OR 코드로 구현하라고 함
- 파이썬 구현 10줄 내외이기도 하고
- for/ index/ 규칙 : 코드 작성에 있어서 기본기를 파악하기 용이함
- 알고리즘 효율성/ 특징 등 여러가지 물어볼 수 있어서 물어봤음
- 코테 상에서 정렬에 대한 알고리즘 중요하지 X ⇒ 대신 문제에서 제시한 기준대로 정렬할 수 있도록 코드화하는 것이 중요함
- 파이썬을 가지고 정렬하는 기본적인 기능
- 파이썬을 가지고 정렬을 하는 경우가 2가지 있음
- 1)리스트.sort() 메서드
- 2)파이썬 자체 sorted() 함수
- 리스트 내에 내장되어있는 것 아니다보니
- 원본 그대로 유지
- 번거로운 점: 변경된 결과가 필요하면 따로 저장 or 할당 해야함
- ⇒ 공통점 : 사용방식은 동일함
- 중요한 점
- 위의 2가지 방식을 사용할 때 → 문제에서 요구하느 대로 정렬 기준 작성
- 특별한 정렬 기준에 대해서 → lambda 함수를 사용해서 정렬 규칙을 기술해야함
- 코테에서는 문제 상황, 조건이 다양함, 연습해야함
- 이러한 정렬을 하기 위해서 편한 자료형…값, 주어진 문제들을 풀면서 어떻게 세팅할 것인가 고민해봐야함
- 정렬
- 기준을 가지고 그 기준에 맞춰서 “순서를 정리”
- 기준 : 위치, 값의 크기, 알파벳, 문자순, 성적순…
- 참고) 단순 순서상 재배치 : reverse() 메서드, reversed() 함수
- 주의* : 값의 크기 기준X, 단순 위치가 기준인 경우를 역순해
- 값을 기준으로 정렬 : sort() 메서드, sorted()함수 → 수업진행상 원본 유지하는 sorted()를 주로 사용할 것
- option) 값에 대한 정렬 기준 → 오름/내림차순
- reverse = False : 오름차순 → Default
- reverse = True : 내림차순 ⇒ FM적으로 오름/내림차순 지정하는 방식
- 정리
- 포지션 중심으로 뒤집기 : .reverse() 메서드, reversed()함수
- 기준을 가지고 정렬 오름/내림차순 옵션 지정 : reverse 파라미터 T/F : .sort()메서드, sored()함수
- ** 목적 : 내가 원하는 정렬 기준을 만들어서 하자!!! ******
- 수업 진행을 위해서,,원본을 유지하는 sorted만
- 원하는 기준들을 작성해서 표현: lambda 함수 작성
- ex) 앞글자 1개만 가지고 정렬 → 그 외에 글자들은 신경 안 씀(그냥 원본 순서대로 유지)
sorted(str_list, key = lambda x:x[0])
- ex) 특이하게 글자 2번째에 있는 글자 1개만 가지고 정렬 → 그 외에 위치의 글자들은 상관없음(원본 순서대로) ⇒ 내가 직접 기준을 명시
sorted(str_list, key = lambda x:x[1])
- ex) 글자 길이를 순서대로 정렬하시오 → 특별 기준이므로, 내가 직접 만들어야함
sorted(str_list, key = lambda x:len(x))
- ex) 글자 길이 역순대로 정렬하시오(FM적인 방식)
sorted(str_list, key = lambda x:len(x), reverse = True)
- 기준에 대해서 방향성 오름/내림 → FM적: reverse 파라미터 T/F
- AM적으로는 간단하게 부호 +/- → 조건이 여러개가 있는 경우에 대해서 각 조건별로 방향이 다를 때
⇒ 조건에 대한 개별 방향성을 표현하기 위한 방법
#FM
sorted(str_list, key = lambda x:len(x), reverse = True)
#AM
sorted(str_list, key = lambda x:+len(x))
#FM
sorted(str_list, key =lambda x: len(x) ,reverse=True)
#AM
sorted(str_list, key =lambda x: -len(x))
- 구체적인 예시
- 이름, 성적에 대한 자료형에 대한 정렬
- 그냥 정렬해줘
- 정렬 기준 : 이름 중심으로 정렬해라
sorted(zumsu_list, key = lambda x : x[0])
- 정렬 기준: 성적순으로 정렬해라
sorted(zumsu_list, key = lambda x : x[1])
- 내가 기준을 지정하지 않은 상황에 대해서 앞의 기준에서 동일한 순서가 발생
- 여기서는 5점에 대한 것
- 원본의 순서를 유지함!!!
- 성적이 제일 높은 친구들은 앞에 먼저 보고싶다
- 성적 & 내림차순
- 방향성에 대한 지정
- FM → reverse = T/F
sorted(zumsu_list, key = lambda x : x[1], reverse=True)
- AM → +/-
sorted(zumsu_list, key = lambda x : -x[1])
- 예) 조금 더 유사한 값들이 있는 경우로 세팅 (이름 - 성적)
- 그냥 정렬
- 결과
- 이름 순서대로 오름차순 정렬 → 사전순
- 이름이 같다면? 뒤의 값(성적)을 기으로 오름차순
- ⇒ 기준대로 순서대로 오름차순 일괄 적용
⇒ 코드적으로 정렬 기준에 안 쓰면 → 원본 순서를 유지함
- 예) 아무것도 안 한 sorted()와 동일하게 sorted(zumsu_list) 결과와 동일하게 나오도록 key, lambda를 설정
- 보통 코테에서는 혼재된 방향성을 제시하는 경우들이 종종 있음