자바를 배우기 시작한 지 며칠되지 않은 시점에서 코딩 테스트를 몇 개 진행해 보았다.
정답률이 높은 순서대로 하나 씩 풀어보았는데 막 못 풀겠다. 라는 문제는 없었지만
그 중 " 문자열 뒤집기 " 문제가 조금 시간이 걸렸던 것 같다.
물론 이 문제도 결국에는 charAt 같은 함수나 StringBuilder 객체에 revers라는 메서드를
알고 있다면 쉽게 풀었을 것 같았지만, 자바 기본 문법만 조금 배웠던
나는 이 문제를 풀기위해 아무것도 모르는 상태에서
단순히 어떻게 풀어야 할까 삽질을 하기 시작했다.
아래는 문자열 뒤집기의 지문이다.
처음 딱 봤을때는 어려울게 없을 것 같아서 보이는대로 코드를 작성해보려고 했는데
막상 반복문을 돌리려고 하다가 이상함을 느끼기 시작했다.
처음에는 반복문으로 i번의 맨 끝 번호부터 반복문을 돌리면 쉽게 해결하겠네.
라고 생각을 했었는데 문득..
" 어떻게 뒤 부터 출력을 하게 만들지? " 라는 고민을 10분 넘게 했었던 것 같다.
그러다가 여기서 삽질을 하기 시작했던게 처음 생각을 했던건
어떠한 변수 값을 넣어서 거기에 이 전 문자를 추가하고 반복문을 2개 넣어서 위치를 바꿔볼까?
라는 생각으로 삽질을 하기 시작했는데 여기서 한 번 더 멈칫했었던 부분은 생각을 해보니까
이건 배열이 아니라 일반적인 String 객체의 문자열을 뒤집는 문제였던 것이다.
배열이었으면 문자열 안의 원소를 하나씩 뽑아서 계속 위치를 바꿔주면 될 것 같은데..
라는 생각을 계속 했었고 고민을 계속 해보다가 결국 구글의 힘을 빌리기 시작했다.
검색어는 " 자바 문자열을 뒤집는 함수 "
역시 있었다. 다른 객체를 사용하지 않는 방법으로 charAt 함수를 찾아냈었다.
아래는 내가 처음으로 문제를 풀었던 방식이다.
String answer = "";
for (int i = 1; i <= my_string.length(); i++) {
//answer += my_string.charAt(my_string.length() - i);
answer = answer + my_string.charAt(my_string.length() - i);
}
return answer;
이렇게 문제를 풀어보고 다른 사람들의 풀이를 둘러보기 시작했는데
이 방식조차 너무 긴 코드이고 더 간결한 코드가 무수히 많았다.
이런 방식의 문제에 사용하는게 옳은진 모르겠지만 stream(?)을 사용하는 방식도 봤었고,
유독 내 눈에 뛴 방식은 StringBuilder 객체의 reverse 메서드를 사용하는 방법이었다.
아래는 StringBuilder 객체로 다시 풀어본 문제이다.
String answer = "";
StringBuilder sb = new StringBuilder(my_string);
answer = sb.reverse().toString();
return answer;
여기서 생각이든건 생각보다 이 자바라는 언어는 사람이 생각을 할법한 것들이
함수로 구현되어 있었구나, 앞으로는 코딩 테스트를 연습 할 때
이런 함수들을 중점으로 찾아보자 라는 생각을 가지게 되었다.
마치며, 남들에게는 이 문제들이 밥 먹는 것 보다 쉬울 수 있을텐데
비기너의 입장으로는 이 문제들을 하나 씩 풀어나갈 때 마다
내가 그래도 헛공부를 하지 않았구나 라는 생각이 계속 상기되면서
주어진 문제를 해결했을 때 알 수 없는 뿌듯함이 몰려왔었다.
결론은 자바 문법을 공부하는 것 , 코딩 테스트를 풀어보는 것 둘 다 너무 재밌었다.