최근에 본 코테에서 주어진 입력방식대로 입력을 받고 처리하는 방법을 몰라서 틀린 문제가 있다.
나는 언제나 코테를 준비하며 콘솔 입력 형식만 고집하며 연습해왔어서, [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 + " ");
}
}
}
왜 틀렸을까?
틀리고난 직후 확인했는데, 사실 알았는데 못푼 그런 억울한 문제는 아닌 것 같다. 그냥 자바 문법이 아직 조금 모자랄뿐..
IDE까지 쓰게 해줬는데도 저 방법을 생각해내지 못한 나에게 침통하다.. 쿳소
사실 스트림이 아직 익숙지 않고, 정규표현식과도 친하지 않기 때문이 아닌가 생각해본다.
나름 자바 문법을 열심히 했는데도, 알고리즘을 구현하는데 있어서 약점이 많은 것 같다.
아무튼, 코딩테스트에서 대괄호 유형의 배열 입력이 많이 나타나기 때문에, 이번 계기를 기회로 잘 학습해 놓으면 좋겠다 싶어 글을 작성하여 남긴다.
다음 코테에선 실수 하지 말자!