라티의 작은 일기장

패스트캠퍼스 Java 코딩테스트 강의 1주차 본문

PS(Java)

패스트캠퍼스 Java 코딩테스트 강의 1주차

코드라티 2023. 4. 23. 23:30

패스트캠퍼스에서 이번에 3개 언어 코딩테스트 강의에 대해 환급챌린지 도전자를 모집하길래 후다닥 신청해봤다.

JS, Python도 끌렸지만 나는 Java 코딩테스트 강의를 신청해보았다. 아직 학부 졸업 전이라 Java가 종종 쓰일 일이 있는데 그 때마다 뭔가 Java 기본기가 부족하다는 느낌도 들었고, 어떤 언어로 PS(Problem Solving)을 준비하게되면 해당 언어에 대해 숙련도가 어느 정도는 올라가는 이유도 있다.

 

항상 코테를 위해 PS 공부를하다보면, 넓은 화면 내지 듀얼 모니터의 필요성에 대해 느끼게 된다.

코드는 한번에 많이 볼 수 있으면 좋고, 문제도 지문을 한 눈에 읽을 수 있는 것과 없는 것은 큰 차이가 있기 때문이다.

그런데 코딩테스트 강의를 보면서 또 PS를 하려다보니 화면 구성이 필요했는데, 짧은 고민 끝에 내린 결정은 내가 프론트엔드 관련 실습을 진행할 때 채택하는 화면 구성이 좋다는 것이었다. 맥북에 웹 브라우저 + IDE, 아이패드에 강의 영상.

대충 사진과 같은 형태인데, 1주차 기간동안 코딩테스트 강의를 들어보니, 문제에 대해서 해설을 제공해주는 강의였다. 그렇다보니 강의 화면을 내내 쳐다볼 필요는 없다는 생각이 들었다. 왜냐면 PS 문제는 결국 스스로 풀어낼 수 있는 능력을 기르는게 중요하고, 강의 영상은 진짜 도저히 이 문제에 대해 접근조차 어렵다면 보게 되는 것이기 때문이다. 따라서 비슷한 상황에 있는 다른 분들은 굳이 듀얼 모니터를 사용하지 지 않아도 코테 강의를 활용해 PS를 할 수 있다고 생각해주시면 될 것 같다.

 

Python, JS, C++ 등 타 언어는 스크립트 파일별로 런타임을 쉽게 분리할 수 있었지만, Java는 기본적으로 프로젝트를 기준으로 런타임이 구성되어 뭔가 까다롭다는 생각이 들었다. 그런데 강의를 보면 VSC, IntelliJ, Eclipse 3개 IDE 중 하나를 골라서 사용하라고만 나와있고 프로젝트 세팅에 관한 내용은 생략돼있어서 나처럼 처음으로 Java 기반 PS 환경을 구성해보는 사람은 당황할 수도 있다고 생각했는데, 생략돼있는 이유가 있다. 매우 간단하거든. 그냥 src 디렉토리 안에 Main.java 하나 만들어두고 거기에 main 메소드 정의해서 쓰면 된다.

대충 이런 모습일 것이다. 오 근데 설정하고 나니까 문득 든 생각은, 우리는 엄청나게 많은 문제를 풀어야하고, 그 때마다 소스파일을 생성해서 작성하는 식으로 관리하고 싶어질 것이다. 그러니까 소스파일 이름은 문제 정보로 설정하고, 해당 문제를 풀었으면 전체를 주석처리하는 방식으로 관리하면 더 좋을 것 같다는 생각이었다. 그런데 그렇게 하려고 문제를 풀고나서 어쩌다 소스파일 하나를 주석처리하지 않고 실행을 해보았는데...

잘...된다?

놀랍게도 잘 되는 것이었다. 인텔리제이가 알아서 소스 파일 별로 런타임을 구성해준건지, 실행 단축키(control + R)로 실행해도 오류 없이 실행되었다. (갓갓 인텔리제이...) PS 공부가 더 재밌어질것같다.

 

아, 그리고 강의에 대해서 첨언하자면, 1주차 강의에서도 코드 내 반복을 줄여 간소화시키는 목적으로 그 기능을 따로 함수로 구현해서 코드를 작성하는 방법같이, 단순한 PS 풀이용 코드가 아닌 조금 더 읽기 편하고 좋은 코드를 작성하는 방법에 대해 알려주셔서 좋았던 것 같다.

 

예를 들면

int[] countA = new int[26];
int[] countB = new int[26];
for (int i = 0; i < a.length(); i++)
    countA[a.charAt(i) - 'a']++;
for (int i = 0; i < b.length(); i++)
    countB[b.charAt(i) - 'a']++;

이렇게 각 문자열을 이루는 알파벳의 위치를 기록하는 배열을 받는 코드를 리팩토링하는 과정으로서

public static int[] getAlphabetCountArray(String str) {
    int[] count = new int[26];
    for (int i = 0; i < str.length(); i++)
        count[str.charAt(i) - 'a']++;
    return count;
}

위치를 기록한 배열을 반환하는 함수를 하나 만들어주게되면? 아까 그 코드가 이렇게 간단해지는 것이다.

int[] countA = getAlphabetCountArray(a);
int[] countB = getAlphabetCountArray(b);

 

 

 

강의 상세 페이지 : https://fastcampus.co.kr/dev_online_codingtest

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

'PS(Java)' 카테고리의 다른 글

패스트캠퍼스 Java 코딩테스트 강의 2주차  (0) 2023.04.30