코딩 테스트 입문

공부·2024년 11월 22일

후기

자바를 배우기 시작한 지 며칠되지 않은 시점에서 코딩 테스트를 몇 개 진행해 보았다.

정답률이 높은 순서대로 하나 씩 풀어보았는데 막 못 풀겠다. 라는 문제는 없었지만

그 중 " 문자열 뒤집기 " 문제가 조금 시간이 걸렸던 것 같다.

물론 이 문제도 결국에는 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;

여기서 생각이든건 생각보다 이 자바라는 언어는 사람이 생각을 할법한 것들이

함수로 구현되어 있었구나, 앞으로는 코딩 테스트를 연습 할 때

이런 함수들을 중점으로 찾아보자 라는 생각을 가지게 되었다.

마치며, 남들에게는 이 문제들이 밥 먹는 것 보다 쉬울 수 있을텐데

비기너의 입장으로는 이 문제들을 하나 씩 풀어나갈 때 마다

내가 그래도 헛공부를 하지 않았구나 라는 생각이 계속 상기되면서

주어진 문제를 해결했을 때 알 수 없는 뿌듯함이 몰려왔었다.

결론은 자바 문법을 공부하는 것 , 코딩 테스트를 풀어보는 것 둘 다 너무 재밌었다.

코딩 테스트

0개의 댓글