package org.problem.solving.BOJ;
import java.util.Scanner;
public class Java2941 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
int num =0;
for (int i=0;i<s.length();i++){
switch (s.charAt(i)){
case 'c': case 's': case 'z':
if (i+1<s.length()){
if (s.charAt(i+1)=='='){
i++;
} else if (s.charAt(i+1)=='-') {
i++;
}
}
num+=1;
break;
case 'l': case 'n':
if (i+1<s.length()){
if (s.charAt(i+1)=='j'){
i++;
}
}
num+=1;
break;
case 'd':
if (i+1<s.length()){
if (s.charAt(i+1)=='-'){
i++;
} else if (s.charAt(i+1)=='z'){
if (i+2<s.length()){
if (s.charAt(i+2)=='='){
i+=2;
}
}
}
}
num+=1;
break;
default:{num+=1;break;}
}
}
System.out.println(num);
}
}
가끔 버퍼리더가 빨라서 버퍼리더를 사용한다
하지만 스케너,버퍼리더 비교로 빠르게하는건 의미가없고 내 알고리즘이 빨라지는게 중요하다 생각해서 그냥 스케너를 사용했다
입출력이 무엇이든 내 알고리즘이 느리면 어차피 실패라고 생각했다
하지만 빠른 입출력은 그냥 기본이라고 하더라..
스위치 케이스를 사용했고 String의 인덱스 값을 기준으로 대입해가면서 판단하는 방법을 사용했다
처음에는 OutOfBounds 가 떳다
s의 i번째 인덱스 값이 해당 케이스일때 그 안에서 i+1,2한 값을 비교하는대
s 문자열의 마지막,맞 마지막에서 i+1,2값을 조회할수 없기때문이다

그래서 결국 하나의 크로아티아 알파벳에
여러개의 문자가 들어갈경우 s의 i뒤에 문자가 더있는지 if문 으로 체크 해줬다
결국 무수한 for if else로 뒤덮힌 지저분한 코드가 되었다
28분동안 s[i]의 마지막 자리 체크를 5분정도 사용,
불필요한 절차를 줄이는데 20분 정도를 썻다
할수있는건
연산해야할 사항이 아니라서 바로num+=1 해주는 else를 싸그리 묶어 break 되기 직전에 한번만 num+=1 되도록 했다
나름 잘 청소 했다고 생각했다
204ms가 나왔고
다른사람의 소스를 보는데
104초가 나오더라..
다들 비슷한 처리를 했는대
switch case 를 쓴사람은 별로 없었다
그래서 그런지 내가 청소해서 3번 으로 줄인 num+=1 도 단한번 사용 하고 있었다
사실 내가 switch case를 사용한 이유는 바로 전에 푼 문제가 그방법을 사용했는대
if는 많이 썼으니 비교적 잘 안쓰는 문법을 사용해볼 좋은 상황 이었다
나름 만족 스럽다
'생각정리' 카테고리의 다른 글
| ChatGPT와 코드 비교 (greedy) (2) | 2023.06.18 |
|---|---|
| Arrays.sort()와 Collections.sort() (0) | 2023.04.27 |
| DFS 이해 정리 (0) | 2023.04.27 |
| 알고리즘 스터디 후기 / 내 문제점 기록 (0) | 2023.04.07 |
| chatGPT 가 GitHub 코드리뷰를 할수있을까? (0) | 2023.02.23 |
댓글