[python 기초] 백준: 문자열 2 (2941,1316) / sorted함수

EMMA·2022년 2월 21일
0

[python] 백준 시리즈

목록 보기
8/14
post-thumbnail


📍 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)		#전체 길이-(*의 개수) + 크로아티아 알파벳 개수
        

#1316번

단어 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으로 검색)




출처: 백준

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글