[백준] 14405번 피카츄

반응형
반응형

문제

피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다.

문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문자열인지 아닌지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열 S가 주어진다. 문자열은 알파벳 소문자로 이루어진 문자열이며, 길이는 5000을 넘지 않는다.

출력

문자열 S가 "pi", "ka", "chu"를 이어 붙여서 만들 수 있으면 "YES"를 아니면 "NO"를 출력한다.

 

이 문제 자바로 풀면 난이도가 상승하는 이상한 문제... ㅡㅡ;

분명 같은 코드인데 자바는 런타임이고, c++은 답이고...ㅡㅡ;;

이래서 c++로 알고리즘 공부를 해야한다.

package backjun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Picachu {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		
		StringBuilder sb = new StringBuilder(str);
		String ans = "YES";
		int i = 0;
		while(i< sb.length()) {
			if (sb.charAt(i) == 'p' && sb.charAt(i+1) == 'i') {
				i+=2;
			} else if (sb.charAt(i) == 'k' && sb.charAt(i+1) == 'a') {
				i+=2;
			} else if (sb.charAt(i) == 'c' &&  sb.charAt(i+1) == 'h' && sb.charAt(i+2) == 'u') {
				i+=3;
			} else {
				ans = "NO";
				break;
			}
			
		}
		
		
		System.out.println(ans+"\n");
		
	}
}

-> 오답 (런타임 에러)

 

#include <bits/stdc++.h>
using namespace std;

int main(void) {
  string str;
  cin >> str;

  int i = 0;
  bool flag = true;
  while(i < str.length()) {
    if (str[i] == 'p' && str[i+1] == 'i') {
      i+=2;
    } else if (str[i] == 'k' && str[i+1] == 'a') {
      i+=2;
    } else if (str[i] == 'c' && str[i+1] == 'h' && str[i+2] == 'u') {
      i+=3;
    } else {
      flag = false;
      break;
    }
  }

  if (flag) {
    cout << "YES\n";
  } else {
    cout << "NO\n";
  }
}
     

-> 이건 정답!

 

쉬운 문제인데... 자바로 풀때는

 

package backjun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Picachu {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		
		StringBuilder sb = new StringBuilder(str);
		String ans = "YES";
		int i = 0;
		while(i< sb.length()) {
			if (i+1 < sb.length() && sb.charAt(i) == 'p' && sb.charAt(i+1) == 'i') {
				i+=2;
			} else if (i+1 < sb.length() && sb.charAt(i) == 'k' && sb.charAt(i+1) == 'a') {
				i+=2;
			} else if (i+2 < sb.length() && sb.charAt(i) == 'c' &&  sb.charAt(i+1) == 'h' && sb.charAt(i+2) == 'u') {
				i+=3;
			} else {
				ans = "NO";
				break;
			}
			
		}
		
		
		System.out.println(ans+"\n");
		
	}
}

이와 비슷하게 풀어야 한다. 뭐 이거만 답인것이 아니긴 하지만.. 

그냥 신기해서 포스팅 해봅니다. 

 

피카츄!

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2644번 촌수계산  (0) 2020.05.06
[백준] 4963번 섬의 갯수  (0) 2020.05.05
[백준] 14405번 피카츄  (2) 2020.05.04
[백준] 2178번 미로탐색  (0) 2020.05.04
[백준] 1260번 DFS와 BFS  (0) 2020.05.03
[백준] 9086번 문자열  (0) 2020.04.30

댓글(2)

  • 항암제
    2021.07.31 23:42

    c++인 경우 왜 인덱스를 초과하여도 통과가 되는건가요
    pik와 같은 반례에서요

    • 2021.08.01 01:26 신고

      저도 잘 모르겠네요 ㅜㅜ 제가 c++을 사용하지도 않구 너무 오래 되서 잘 모르겠네요 ㅎㅎ

Designed by JB FACTORY