최대 1 분 소요

  • sort(), sorted()

    • 2차원 배열 정렬

      https://www.acmicpc.net/problem/11651

      좌표를 정렬하는데, y값 오름차순으로 정렬, y값이 같으면 x값 오름차순으로 정렬하는 문제이다..

      # coord는 x, y좌표를 저장한 리스트
      coord.sort(key = lambda x : (x[1], x[0]))
      

      정렬기준 key에서 lambda를 이용해 정렬한다.

      lambda x : (x[1], x[0])은 x[1], 즉 y값을 기준으로 정렬한 뒤 x[0], 즉 x값으로 정렬한다.

      coord.sort(key = lambda x : (-x[1], x[0]))
      

      마이너스를 하게되면 내림차순 정렬이 되겠다.

    • 문자열 정렬

      https://www.acmicpc.net/problem/1181

      문자열을 길이가 짧은것부터 길이가 같으면 사전 순으로 정렬하는 문제이다.

      # words는 단어들이 저장돼있는 배열이다.
      words.sort()
      

      괄호안에 아무 argument도 주지 않고 적용하면 문자열의 경우 사전순으로 정렬된다.

      words.sort(key = len)
      

      문자그대로 len, 즉 길이순으로 정렬한다.

      N = int(input())
      words = []
          
      for _ in range(N) :
          words.append(input())
              
      words = list(set(words))
      words.sort()
      words.sort(key = len)
          
      for word in words :
          print(word) 
      

      문제에 대한 전체 코드인데, 한가지 의문점이 for문 이후 sort()가 적용된 두줄의 코드에서 먼저 사전순으로 정렬한 뒤 길이순으로 정렬하면 이전에 사전순으로 정렬된 배열이 섞이게 되는게 아닌가 궁금했는데 찾아보니 파이썬은 stable한 TimSort 알고리즘을 채택하기 때문에 그렇다고 한다. 이에 대한 내용은 찾아보니 양이 꽤 되는것 같아 추후에 포스팅해야겠다.

댓글남기기