먼저 코드를 다음과 같이 쓸 수 있습니다.
n = int(input()) L = [input() for _ in range(n)] count = 0 for 단어 in L: 단어를 먼저 등장한 순으로 정렬해서 얻은 단어와 원래 단어가 같으면: count += 1 print(count)
여기서 원래 단어와, 정렬한 단어를 리스트로 바꾸어봅시다. 먼저 원래 단어를 리스트로 바꾸겠습니다.
이를 리스트로 표현하면 매우 구현이 간단한데, [*단어]와 같이 쓸 수 있습니다. (* 에는 여러 특별한 기능들이 있기 때문이죠!)
예시로, [* 'baekjoon'] == ['b', 'a', 'e', 'k', 'j', 'o', 'o', 'n']이 됩니다.
이제 단어를 어떻게 정렬할 지가 문제입니다. x.find로 정렬하면, x에서 먼저 등장하는 알파벳이 우선 순위가 높도록 정렬됩니다.
즉, x = 'bbadcd'라 두면 sorted(x, key = x.find) == ['b', 'b', 'a', 'd', 'd', 'c]가 됩니다
그러면 아래 코드와 같이 변형됩니다.
n = int(input()) L = [input() for _ in range(n)] count = 0 for 단어 in L: if [*단어] == sorted(단어, key = 단어.find): count += 1 print(count)
근데 파이썬에서는, True은 정수형으로 1을, False는 정수형으로 0을 리턴합니다. 따라서 아래와 같은 코드로 바꿔도 됩니다. 작성의 편리를 위해 이제부터 '단어'를 x라 쓰겠습니다.
n = int(input()) L = [input() for _ in range(n)] count = 0 for x in L: count += ([*x] == sorted(x, key = x.find) print(count)
여기서 for문과, 2번째 줄의 L을 합쳐서, 한번에 답 count가 나오게 할 수 있을까요?
새로운 리스트 M을 생각해봅시다. 그리고 [*x] == sorted(x, x.find)를 만족하면 그 단어의 인덱스에 True을, 아니라면 False을 저장합시다.
그렇다면 M은 아래와 같이 쓸 수 있습니다.
n = int(input()) L = [input() for _ in range(n)] M = [None] * n for i in range(n): x = L[i] M[i] = ([*x] == sorted(x, key = x.find))
여기서 잘 생각해보면, sum(M) == count가 된다는 것을 알 수 있습니다.
그렇다면 애초에, 입력을 받을 때 부터 M과 같은 형식으로 나타낼 수 있을까요? 가능합니다!
그러기 위해서는 open(0)을 시행한다면 어떻게 채점기에서 작동하는지 알아보겠습니다.
만약 채점 파일이
3 happy new year
라면, open(0)은 ['3', 'happy', 'new', year']을 가져옵니다. 우리는 이 리스트를 L이라고 생각할 수 있습니다!
그렇다면 위의 코드를, list comprehension을 이용해서 아래와 같이 쓸 수 있지 않을까요?
# L = open(0) M = [[*x] == sorted(x, key = x.find) for x in open(0)]
아까 위에서 sum(M) == count라고 했지만, 여기에서는 open(0)에 '3'이 포함되어있다는 사실을 알아야합니다. '3' 또한 True을 리턴하기 때문에, 우리가 구해야하는 값은 sum(M) - 1입니다.
즉, 답은 아래와 같은 꼴이 될 것입니다.
print(sum([[*x] == sorted(x, key = x.find) for x in open(0)]) - 1)
여기서 바깥쪽의 대괄호를 빼도 작동하는데 문제가 없으므로 (자세한 원리는 저도 잘 모르겠습니다.) 아래와 같이 쓸 수 있습니다.
print(sum([*x] == sorted(x, key = x.find) for x in open(0)) - 1)
이제 숏코딩을 위해 공백을 전부 지우면, 완성입니다!
lincolnbro1950 2년 전
(python 3)
문제 풀고 더 좋은 코드를 찾아보려고 숏코드(아래 첨부)를 뒤져봤는데,
그대로 복사해 붙여 넣어도 제 파이썬 프로젝트에선 아무 일도 일어나지 않았습니다.
혹시 어떤 코드인지 해설해주실 수 있나요?