문제
https://www.acmicpc.net/problem/2941
걸린 시간
00 : 59 : 41 실패
풀이
Python3
if __name__ == "__main__":
word = input()
# 출현한 단어 개수
count = 0
# 문자를 하나씩 가져온다.
for i in range(0, len(word)):
# =, -, j 이면 앞에 어떤 문자와 함께 왔는지를 확인한다.
if word[i] == '=':
# dz= 와 z= 구분을 위한
if word[i-1] == 'z':
# 3자리 이상의 문자열이면
if i >= 2:
if word[i-2] == 'd':
count -= 1
elif word[i] == '-':
pass
elif word[i] == 'j':
# 맨 처음에 오는 문자이면 (앞에 문자가 없으면)
if i == 0:
count += 1
else:
if word[i-1] == 'l' or word[i-1] == 'n':
pass
else:
count += 1
# 이외의 문자에 대해서는 하나씩 count 한다.
else:
count += 1
print(count)
문제에서는 크로아티아 알파벳의 개수를 세라고 했다. -
=
j
같은 문자들이 단독으로 쓰이거나 표에 없는 다른 문자와 조합될 때를 생각해서 코딩했어야 했다. 올바른 예제들만 테스트 케이스로 쓰일 줄 알았는데 그렇지 않은 것들도 사용되는 듯하다.
다른 풀이
TypeScript
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input';
const stdin = fs.readFileSync(filePath).toString().trim().split('\n').map((s: string) => s.trim());
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const word: string = input();
let ans: number = 0;
for(let i = 0; i < word.length; i++){
ans++;
switch(word[i]){
case 'c':
if(i+1 < word.length && (word[i+1] === '=' || word[i+1] === '-')) i++;
break;
case 'd':
if(i+1 < word.length && word[i+1] === '-') i++;
else if(i+2 < word.length && word[i+1] === 'z' && word[i+2] === '=') i += 2;
break;
case 'l':
if(i+1 < word.length && word[i+1] === 'j') i++;
break;
case 'n':
if(i+1 < word.length && word[i+1] === 'j') i++;
break;
case 's':
if(i+1 < word.length && word[i+1] === '=') i++;
break;
case 'z':
if(i+1 < word.length && word[i+1] === '=') i++;
break;
}
}
console.log(ans);
c, d, l, n, s, z 뒤에 어떤 문자가 나오는지에 따라 인덱스 값을 증가시켜주면 쉽게 풀이할 수 있다. 예전 풀이처럼 =, -, j 를 기준으로 로직을 짜면 더 복잡하다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 1436번 영화감독 숌 (0) | 2020.07.22 |
---|---|
Baekjoon 7568번 덩치 (0) | 2020.07.22 |
Baekjoon 1316번 그룹 단어 체커 (0) | 2020.07.21 |
Baekjoon 4949번 균형잡힌 세상 (0) | 2020.07.21 |
Baekjoon 11866번 요세푸스 문제 0 (0) | 2020.07.21 |
댓글