📍 In a nutshell...
sort()
와 sorted()
는 비슷하지만 차이가 있다. sort()
: list를 오름차순으로 정렬해 원본 list값이 변경되며, list형만 사용 가능함sorted()
: list를 오름차순으로 정렬해서, 원본은 두고 신규 list로 반환함 sort()
와 sorted()
는 추가 옵션을 통해 정렬을 다양하게 할 수 있다. list.sort(key=None, reverse=False)
sorted(list, key=None, reverse=False)
#2941번
단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력하는 문제다.
만약 크로아티아 알파벳이 있다면 (in 입력값), +1씩 카운트 한다.
크로아티아 알파벳이 아닌 알파벳을 카운트 할 때는, 전체 문자 개수(len(입력값)
)에서 크로아티아 알파벳을 하나 하나 카운트해서 빼야 한다.
문제를 잘 보면, 크로아티아 알파벳은 길이가 어떻든 각각 1개로 취급된다. 예를 들어 'dz='는 1개다. 하지만 나머지 알파벳 개수를 셀 때는 3개로 취급되어야 한다. 그렇지 않으면 틀린 값이 나와 주의해야 한다.
answer= input()
croatia = ["c=","c-","dz=","d-","lj","nj","s=","z="]
cnt = 0
for c in croatia:
if c in answer:
cnt += answer.count(c) #크로아티아 알파벳 개수
answer = answer.replace(c,"*"*len(c)) #크로아티아 알파벳 하나하나 *로 변경
print(len(answer)-answer.count("*")+cnt) #전체 길이-(*의 개수) + 크로아티아 알파벳 개수
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하는 문제다. 그룹 단어란, ccazzzzbb처럼 c, a, z, b 등 모든 문자가 연속해서 나타나는 단어를 뜻한다. kin도 k,i,n 이 연속되기 때문에 그룹 단어다. 하지만 aaba는 a가 떨어져 나타나기 때문에 그룹 단어가 아니다.
이 문제의 경우, sorted()
에 대해서 좀 더 배울 수 있었던 문제다. sorted()
를 아래와 같이 작성하면 문자를 같은 문자형끼리 정렬할 수가 있다 (!)
sorted(list, key=..., reverse=...) #default는 오름차순, reverse 적용(True)하면 내림차순
key에 list.find
를 작성하면, 읽히는 순서대로 문자를 모아 정렬해서 list로 돌려준다.
이를 활용해서, 입력값이 sorted()
를 적용한 것과 동일하지 않으면 (즉 모든 문자가 연속되어 있는 형태가 아니라면), 총 개수에서 제외해 그룹 단어 개수를 구하면 된다.
N = int(input())
for i in range(N):
answer = input()
if list(answer) != sorted(answer, key=answer.find):
N -= 1
print(N)
sorted()
와 관련한 내용은, 여기를 통해 학습했다.
처음엔 아예 몰랐고, 블로그 몇 개 참고해 힌트를 얻어 검색해 볼 수 있었다.
(sorted method in python -> sorted key funciton in python으로 검색)
출처: 백준