최근에 본 코테에서 주어진 입력방식대로 입력을 받고 처리하는 방법을 몰라서 틀린 문제가 있다.

나는 언제나 코테를 준비하며 콘솔 입력 형식만 고집하며 연습해왔어서, [1,2,3] 이런식으로 입력 받으면 어떻게 처리해야할지 몰랐었다(진짜 몰라서 리스트 쓰고 난리났었다ㅡㅡ..)

알고리즘은 다 구현하고 출력까지도 모든 테스트 케이스와 동일했지만, 입력이 대괄호에 감싸져 입력되는 경우에 어떻게 처리 되는지 몰라서 해결방법을 찾고, 두번 다시는 같은 실수를 반복하지 않겠다고 다짐하고자 이 글을 작성한다.


입력 배열에 대한 대괄호를 제거하기

정규표현식을 활용한 문자 제거 + 스트림 활용을 활용하여 문제를 해결할 수 있었다.

절차는 아래와 같다.

0. 입력은 String type으로 받기

1. 정규 표현식을 통해 대괄호 제거(공백으로 교체)

String cleanedInput = input.replaceAll("[\\[\\]]", "");

2. split 메서드로 쉼표 단위로 데이터를 구분하여 배열에 저장 (아직은 문자열 타입)

String[] stringArray = cleanedInput.split(",");

3. 문자열 배열을 스트림으로 변환(Arrays.stream) + 스트림의 각 요소를 정수로 변환(mapToInt) + toArray메서드로 스트림을 배열로 변환

int[] intArray = Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray();

 

예시 코드

import java.util.*;

public class Main {

    public static Scanner sc =new Scanner(System.in)

    public static void main(String[] args) {
        String input = sc.next();
        String cleanedInput = input.replaceAll("[\\[\\]]", "");
        String[] stringArray = cleanedInput.split(",");

        int[] intArray = Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray();


        for (int i : intArray) {
            System.out.print(i + " ");
        }
    }

}

실행 결과(3은 배열 길이)

 

왜 틀렸을까?

틀리고난 직후 확인했는데, 사실 알았는데 못푼 그런 억울한 문제는 아닌 것 같다. 그냥 자바 문법이 아직 조금 모자랄뿐..

IDE까지 쓰게 해줬는데도 저 방법을 생각해내지 못한 나에게 침통하다.. 쿳소

사실 스트림이 아직 익숙지 않고, 정규표현식과도 친하지 않기 때문이 아닌가 생각해본다.

나름 자바 문법을 열심히 했는데도, 알고리즘을 구현하는데 있어서 약점이 많은 것 같다.

아무튼, 코딩테스트에서 대괄호 유형의 배열 입력이 많이 나타나기 때문에, 이번 계기를 기회로 잘 학습해 놓으면 좋겠다 싶어 글을 작성하여 남긴다.

 

다음 코테에선 실수 하지 말자!