문제

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

댓글