Python

python) 백준 1316 그룹 단어 체커, sorted 함수의 key의 find

summerorange 2022. 8. 11. 11:32
반응형

백준 1316번 문제를 풀다가 다른 사람들은 어떻게 풀었을까 궁금해서 숏코딩 찾아보다가.

sorted 함수의 key에서 find를 쓴 걸 발견했다. 와 이렇게도 푸는 구나. 

그런데 sorted(word, key=word.find)가 뭐고 이걸 왜 쓰는 걸까?

한 번 코드를 다시 살펴봤다.

word = input()
list_word = list(word)
sorted_word = sorted(word, key=word.find)
sorted_word_2 = sorted(word)

print(word)
print(list_word)
print(sorted_word)
print(sorted_word_2)

로 돌리면 다음과 같이 나타났다.

kabcabc
['k', 'a', 'b', 'c', 'a', 'b', 'c']
['k', 'a', 'a', 'b', 'b', 'c', 'c']
['a', 'a', 'b', 'b', 'c', 'c', 'k']

단순히 sorted(word) 만 하면 a, b, c 순으로 다시 정렬되어서 나타나고,

sorted(word, key=word.find)를 하면 기존의 k가 먼저나온 순서는 지키면서 중복 값들을 정렬해주었다.

sorted는 값, key, reverse를 파라미터 값으로 받는데 reverse=False 이건 익숙해도 key 부분을 이렇게 쓰는 건 처음봐서 좀 신기했다.

이렇게 파이썬 추가 기능 하나 더 배움.

 

추가로, 백준 1316번의 그룹 단어 체커 코드 직접 풀면서 짜본 코드도 함께 포스팅.

# 1316 그룹 단어 체커
n = int(input())
c = 0

for i in range(n):
  a = list(map(str, input()))
  b = []

  for i in range(0, len(a)):
    if a[i] not in b:
      b.append(a[i])
    else:
      if a[i] == a[i-1]:
        b.append(a[i])
      else:
        pass

  if len(a) == len(b):
    c += 1
  else:
    pass
  
print(c)

하핫 왜 난 코드가 긴가ㅎㅎ.

맨 처음 문제를 받았을 때 이걸 어떻게 해결하지? 라고 생각하면서 시간이 좀 걸렸다.

시간이 좀 걸려도 스스로 푸는 게 좋다고 생각한다. 수학 문제 푸는 기분이다.

자주 유용하게 쓰는 for문과 리스트 위주로 풀었다.

끝:)

 

반응형