Algorithm/Baekjoon

세무민의 코딩일기 : 백준 알고리즘 나이순 정렬 문제 풀기 [10814번]

세기루민 2021. 2. 3. 20:56
728x90

이번 포스팅은 2년 전에 C++로 작성해서 문풀 했던 기억이 나는데 

파이썬으로 풀면 좀 더 간편하게 풀 수 있을 것이라고 판단해서 파이썬으로 풀어봤다.


문제는 위와 같은데 

말 그대로 나이순으로 정렬한다. 

그렇지만 나이가 동일한 경우에는 알파벳 순서대로! 

이 경우에는 파이썬에서 sort를 이용한다면 쉽게 가능하다는 판단이 나왔다. 

C++로 문풀한 건 2년 전이지만 

파이썬으로 쉽게 만들었지만 문제가 틀렸다고 나왔다.

그래서 무슨 문제인지 처음에 몰랐는데.......

파이썬에서 변수를 설정할 때 정수형을 구분 안해서 틀렸다....

즉 Number = int(input().split()) 으로 변수를 입력받거나 아니면 변수를 int(number)로 변환해야 했는데...

그렇게 하지 않아서 문제가 틀렸다.


# count를 이용하여 구분하려고 만듬
n = int(input())
text_input = []
text_result = []

for i in range(n):
    text_input = input().split(' ')
    number = int(text_input[0]) 
    text = text_input[1]
    count = i
    text_result.append((number, text, count))
    
text_result.sort(key=lambda number : (number[0], number[2]))

for textNum in text_result:
    print(textNum[0], textNum[1])
    
    
 -------------------------------------------------------------------
# 변수 함축
n = int(input())
text_input = []
text_result = []

for i in range(n):
    number, text_input = input().split()
    text_result.append((int(number), text_input))
    
text_result = sorted(text_result, key=lambda number : number[0])

for textNum in text_result:
    print(textNum[0], textNum[1])

우선 위에 코드로 구성했는데

처음에는 lambda라는 내장함수를 사용하는 방법을 몰라서

C++에서 만들었던 것 처럼 age라는 변수를 생성하려고 했으나

lambda라는 내장 함수를 알고난 뒤 위처럼 구현했다. 

말 그대로 첫번째 코드처럼 풀면 

나이와 먼저 들어온 순서대로 구분해줬다.

그 후 sort를 돌려서 반복문으로 출력하면 끝!

위에 방법처럼 만들어도 무관하지만 메모리 사용이 생각보다 커서 

count를 사용하지않고 두번째 코드처럼 단축시켰더니 

메모리 사용이 줄어들었다. 

굳이 카운트를 하지 않고 나이 순서대로 정렬해도 알파벳 순서대로 정렬되기 때문에

count라는 변수를 사용하지 않아도 괜찮다는 걸 느꼈다. 


정렬에 관련된 문제를 풀었는데 

최근에 HackerRank와 비교해보면 확실히 백준이 문제가 다양하고 많지만 

HackerRank와 백준 둘다 어렵다는건 아직 똑같다....ㅠㅠ

그래도 열심히 공부해야겠다는 생각이 들었다.

무튼 다음에는 다른 알고리즘 문제 풀이로 찾아오겠습니다. 

 

728x90