본문 바로가기
개발/Coding Test - Python

[Python] 이것이 코딩테스트다 with 파이썬 - 정렬 - 성적이 낮은 순서로 학생 출력하기 ( 실행 에러와 람다(lambda) 함수 )

by seopport 2023. 1. 28.
728x90
반응형

들어가기 앞서

 

해당 문제 및 해설은 "이것이 코딩 테스트다 with 파이썬" 책을 기준으로 요약 및 정리 하여 작성하였습니다. 

 

http://www.yes24.com/product/goods/91433923

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 - YES24

나동빈 저자의 유튜브 라이브 방송 https://www.youtube.com/c/dongbinnaIT 취준생이라면 누구나 입사하고 싶은 카카오 · 삼성전자 · 네이버 · 라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생

www.yes24.com

 

 


 

정렬 알고리즘

 

 

정렬 이란, 데이터를 특정한 기준에 따라서 순서대로 나열 하는 것을 말한다.
알고리즘 효율성을 쉽게 이해할 수 있는 정렬을 통하여 코딩 테스트 합격률을 높여보도록 한다. 
정렬 알고리즘은 굉장히 다양한데 이 중에서 많이 사용하는 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬을 정리 해보려고 한다.

 

 

 

람다 (lambda)

 

함수를 호출 해서 코딩을 하는 경우가 있다고 가정해보자. 

함수를 작성하고, 인자를 받아 함수를 호출한다.

 

람다함수를 사용하면, 함수를 간결하게 만들어서 값을 출력할 수 있다.

 

# 기본 방식 - 함수 호출 후 출력
def multiplication_five(x):
    return x * 5
 
use_def = list(map(multiplication_five, [1, 100]))

 
# 람다 방식 - 람다 함수 출력 
use_lambda = list(map((lambda x: x * 5), [1, 100]))

print(use_def) # 5, 500
print(use_lambda) # 5, 500

 

 

아래 문제에서는 sort 안에 넣어, 오름차순 또는 내림차순을 나타내기 위하여 사용 한다.

(홍길동, 95), (이순신, 77) 와 같이 리스트 안에 복수 행이 들어가 있는 경우, lambda 함수를 사용하여 쉽게 정렬할 수 있다.

 
key 값을 이용하여, 행의 1 번째 값으로 정렬하고 있다. 
 
 
array.sort(key = lambda x: x[1])
 
 
 

문제 설명 : 정렬 - 성적이 낮은 순서로 학생 출력하기

 

 

N 명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 학생의 이름을 출력하는 프로그램을 작성하시오.

 

 

입력 조건

 

  • 첫번째 줄에 학생의 수  N 이 입력된다. ( 1 ≤ N   500)
  • 둘째 줄부터 N + 1 번째 줄에는 학생의 이름을 나타내는 문자열 A 와 학생의 성적을 나타내는 정수 B 가 공백으로 구분되어 입력된다. 문자열 A 의 길이와 학생의 성적으 100 이하의 자연수이다.

 

출력 조건

 

  • 모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다.

 

 

입력 예시 출력 예시
2
홍길동 95
이순신 77
이순신 홍길동

 

 

 

 

답변 및 해설

 

 

# N 을 입력받기

n = int(input())

# N 개의 정수를 입력 받아, 리스트에 저장
array = []


for i in range(n):
  input_data = input().split()
  # 이름은 문자열 그대로, 점수를 기준으로 정렬
  # array.append((input_data[0], int(input_data[1])))  
  array.append((input_data[0], input_data[1]))
  
  

# 키를 이용하여, 검수를 기준으로 정렬
array.sort(key = lambda x: x[1])


for i in array:
  print(i[0], end = ' ')

 

 

실행 중 에러

 

 

 

IndentationError: unindent does not match any outer indentation level

답부터 말씀드리면, 정답은 들여쓰기 오류 이다.

 

들여쓰기를 3칸 및 4칸으로 한다면 잘 안보이는 경우가 가끔 있다. 이런 경우 때문에 당황할 수 있으니 조심하자.

 

실무에서는 저장 포맷을 사용하기도 하고, 사실 들여쓰기 같은 경우에는 가장 기본적이기 때문에 실수하면 안된다.

다만 온라인 코딩 사이트를 사용하다 보면, 가끔 이런 에러코드를 보면 천천히 들여쓰기를 포맷하자!

 

728x90
반응형