-
[백준 Node.js/Javascript] 2941번 크로아티아 알파벳To infinity/Coding Practice 2021. 6. 27. 20:23
2021.06.27
Question
Answer code
let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().trim(); //길이를 셀 때 공백이 있는지 해당 공백도 세져서 처음부터 없애버렸다. let regExp = /c\=|c\-|dz\=|d\-|lj|nj|s\=|z\=/g;; let result = input.replace(regExp,' '); console.log(result.length);
How to solve?
처음엔 어떻게 풀까 고민했다.모든 조건식을 만들어서 while문으로 돌릴까..했는데 너무 노가다인 것 같다는 생각이 들었다.그러다가 정규표현식이 생각나서 정규표현식으로 풀어봤다.
처음엔 최대한 모든조건..을 다 안적으려고 위와 같은 꼼수?를 썼지만 아무래도 뭔가 어긋나는 조건이 있었던 것 같다.
let regExp = /..=|.=|.-|lj|nj|/g;
크로아티아 문자에 =, -가 들어가는 경우가 위 문자밖에 없을거라고 생각해서 위와같이 적었는데 저렇게 적으니까 오답이 나왔다. 뭔가 조건을 다 적어줘야하는걸까?
let regExp = /c\=|c\-|dz\=|d\-|lj|nj|s\=|z\=/g;
그래서 이렇게 모든 조건을 다 적어 주었다. 그랬더니 정답이 나왔다.
let result = input.replace(regExp,' '); console.log(result.length);
이 부분은 어떻게 하면 정규표현식으로 인식하나 부분을 하나의 문자로 인식시켜 숫자를 셀 수 있을까를 고민하다가 replace라는 함수를 알게되서 써봤더니 응? 원본배열을 바꿔주더라.
게다가 length는 공백의 문자도 인식해줘서 그걸 길이로 받아들였다. 오오
그래서 위와같이 식을 적용했더니 정답이 나왔다. 우왕
하지만 뭔가 반복문을 사용한 답도 구해보고 싶었다.
그래서 해봤다. 정직하게 조건을 다 적었다.
let input = `zdz=dlj`.toString().trim() let count = 0 let i = 0 while(i < input.length) { if(input[i] == 'c' && input[i+1] == '-' || input[i+!] == '=') { count ++ i += 2 } else if(input[i] == 'd' && input[i+1] == '-'){ count ++ i += 2 } else if(input[i] == 'd' && input[i+1] == 'z' && input[i+2] == '=') { count ++ i += 3 } else if(input[i] == 'l' && input[i+1] == 'j'){ count ++ i += 2 }else if(input[i] == 'n' && input[i+1] == 'j'){ count ++ i += 2 }else if(input[i] == 's' && input[i+1] == '='){ count ++ i += 2 }else if(input[i] == 'z' && input[i+1] == '='){ count ++ i += 2 } else { count++ i ++ } } console.log(count);
정직하다.ㅋㅋ
Reference
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js/Javascript] 2292번 벌집 (0) 2021.06.28 [백준 Node.js/Javascript] 1152번 단어의 개수 (0) 2021.06.27 [백준 Node.js/Javascript] 5622번 다이얼 (0) 2021.06.27 [백준 Node.js] 1157번 단어공부 (0) 2021.06.26 [백준 Node.js] 2908번 상수 (0) 2021.06.26