나는 염정훈 나이는 19 글을 시작하겠다.
문제에 대한 나의 생각
나는 뒤에 =, -, j가 오고 앞에 특정 문자가 오면 카운트를 세는 그런 로직을 생각하였다.
그렇지만 이렇게 해버리면 나머지 독립된 문자(a, b, c, d, e, f 등등)를 처리하기가 어려워진다.
그래서 다른 풀이를 찾아보다가 밑의 풀이를 발견하였다.
나의 풀이
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] charr = br.readLine().toCharArray();
int cnt = charr.length;
for (int i = 0; i < charr.length; i++) {
switch (charr[i]) {
case '=':
if (charr[i - 1] == 'c' || charr[i - 1] == 's')
cnt--;
if (charr[i - 1] == 'z') {
cnt--;
if (charr[i - 2] == 'd')
cnt--;
}
break;
case '-':
if (charr[i - 1] == 'c' || charr[i - 1] == 'd')
cnt--;
break;
case 'j':
if (charr[i - 1] == 'n' || charr[i - 1] == 'l')
cnt--;
break;
}
}
System.out.println(cnt);
}
}
다른 사람의 풀이
package baekjoon.problem.String;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
String st = br.readLine();
for (int i = 0; i < arr.length; i++) {
if (st.contains(arr[i])) {
st = st.replace(arr[i], "j");
}
}
System.out.println(st.length());
}
}
이 풀이를 보고 왜 난 이런 생각을 하지 못했나 생각을 했다.
어떻게 이런 로직을 생각해냈을까 사황을 생각해 보았다.
1. 일단 매치되는 문자가 있으므로 매치되는 문자를 배열에 저장한다
2. Bufferedreader로 입력을 받는다.
3. 배열에 저장한 문자의 수로 돌려 만약 문자열에 특정 문자가 있다면
4.replace 해서 아무 문자로 바꿔준다.
그리고 문자의 개수를 세어준다면 답이 나온다.
이 문제를 풀며
나의 생각이 얼마나 한정되어 있는지 알 수 있었다....
좀 더 넓게 바라볼 수 있는 시선을 가지기 위해 노력하자
출처 : https://hellodoor.tistory.com/86