코딩테스트 준비, 파이썬 예제 - 크로아티아 알파벳
코딩테스트 준비, 파이썬 예제 - 크로아티아 알파벳 — #코딩테스트준비 #파이썬예제 #크로아티아알파벳 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 ...
#코딩테스트준비 #파이썬예제 #크로아티아알파벳
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다.
\본 게시글은 PC버전에 최적화되어있습니다.\
크로아티아 알파벳
파이썬예제
문제
| 💡 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. |
|---|
| 크로아티아 알파벳 | 변경 |
|---|---|
| č | c= |
| ć | c- |
| dž | dz= |
| đ | d- |
| lj | lj |
| nj | nj |
| š | s= |
| ž | z= |
| 💡 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다. |
|---|
| ⌨️ 입력: 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다. |
|---|
| 🖨 출력: 입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. |
|---|
문제풀이
인간은 어떻게 푸는가
모든 알고리즘 문제를 풀때, 가장 기초적인 방법은 사람은 어떻게 문제를 푸는지 생각해 보는 것입니다. 우리 뇌는 문제를 직면하면 본능적으로 익숙한 방법으로 문제풀이를 떠올립니다.
이문제의 경우 아래와 같이 문자가 입력되면 뇌는 자연스럽게 문자를 분류합니다.
| ljes=njaklj e s= nj a k |
|---|
ljes=njak
빠른 시간내에 문자를 두개씩 끊어 크로아티아 알파벳에 해당하는지 체크 후 아닌 것과 맞는 것을 분리합니다.
이런 뇌의 자연스러운 풀이법을 토대로 코드를 작성해 보았습니다.
| texts = input()count = len(texts)croatia = \["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="\]two\_combs = \[\]three\_combs = \[\] for i in range(count - 1): two\_combs.append(texts\[i\] + texts\[i + 1\]) if i < count - 2: three\_combs.append(texts\[i\] + texts\[i + 1\] + texts\[i + 2\])for comb in two\_combs: if comb in croatia: count -= 1for comb in three\_combs: if comb in croatia: count -= 1print(count) |
|---|
문자열 "ljes=njak"을 입력 받으면 두개 혹은 세개씩 문자를 나눕니다.
| ljes=njak\["lj", "je", "es", "s=", "=n", "nj", "ja", "ak"\]\["lje", "jse", "es=", "s=n", "=nj", "nja", "jak"\] |
|---|
나눈 문자열이 미리 입력해둔 크로아티아 알파벳 리스트에 포함되어있는지 체크 후 전체 문자열에서 하나씩 빼주면됩니다.
| ljes=njak\["lj", "je", "es", "s=", "=n", "nj", "ja", "ak"\]\["lje", "jse", "es=", "s=n", "=nj", "nja", "jak"\]croatia = \["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="\] |
|---|
더 간단하게 풀어보기
이문제를 훨씬 더 간단하게 풀기 위해 문자열 내장함수 replace를 사용할 수 있습니다.
| words = input('')croatia = words.replace('dz=','.').replace('c=','.').replace('c-','.') .replace('d-',',').replace('lj','.').replace('nj','.').replace('s=','.').replace('z=','.')print(len(croatia)) |
|---|
크로아티아 알파벳에 해당하는 모든 문자를 '.'으로 바꾸면 됩니다. 여기서 주의할점은 "z="과 "dz="의 구분입니다.
replace()메서드는 앞에서 부터 우선순위를 두어 먼저 변경합니다. 만약 "dz="보다 "z="이 먼저 메서드로 입력되었다면 "dz="은 항상 인식되지 않습니다 \\
ex)
| words = input('')croatia = words.replace('z=','.').replace('dz=','.').replace('c=','.').replace('c-','.') .replace('d-',',').replace('lj','.').replace('nj','.').replace('s=','.')print(len(croatia)) |
|---|
| ddz= 입력시croatia = dd.# replace에서 "z="문자열의 변경이 우선순위가 높아 먼저 변경된다. |
|---|
