프로그래머스 _ 코딩 기초 트레이닝 DAY 8 - (5)
출처 - https://school.programmers.co.kr/learn/courses/30/lessons/181913
문제 | 문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해 주세요.
입력 #1 |my_string = "rermgorpsam" , queries = [[2, 3], [0, 7], [5, 9], [6, 10]]
출력 #1 | "programmers"
>> 풀이 <<
원래는 stringbuilder의 replace, substring, reverse 등 메소드를 활용하여 문제를 풀려고 했으나 생각보다 복잡해져서 for문을 활용하는 방식으로 풀이를 변경했다.
queries의 범위가 [i,j] 라고 한다면, i와 j, i+1과 j-1... 이렇게 변경하므로 swap 횟수는 (i+j) / 2 번이다! 즉 for문을 (i+j) / 2번 반복하게 하면 된다. 마지막으로는 char형 배열을 String으로 바꾸어주기 위해 String.valueOf()를 사용하였다.
class Solution {
public String solution(String my_string, int[][] queries) {
char[] arr = my_string.toCharArray();
char a;
for (int i = 0 ; i < queries.length ; i++) {
int spoint = queries[i][0];
int epoint = queries[i][1];
for (int j = spoint ; j <= (spoint + epoint)/2 ; j++) {
a = arr[j];
arr[j] = arr[epoint+spoint-j];
arr[epoint+spoint-j] = a;
}
}
return String.valueOf(arr);
}
}
그런데!!
String.valueOf()를 arr.toString() 으로 바꿔봤는데 아래와 같이 값이 반환되었다.
String.valueOf() 와 .toString() 모두 문자열로 반환해주는 메소드라고 알고 있었는데 결과값이 다른 것을 볼 수 있었다. 그래서 이 둘의 차이점을 찾아보았다.
차이점을 비교해서는 저 궁금증을 해결할 수 없었지만, 그래도 둘의 차이점을 보면 null에 대한 처리 방식에 차이가 있음을 알 수 있었다.
- toString() 은 null값을 문자열로 형변환 할 때 에러가 발생한다. (NullPointerException)
- String.valueOf() 는 null값에 사용하면 문자열 "null" 이 반환된다.
그러면 결론적으로 왜 저런 값이 리턴되었나?
아스키코드가 아니라 구현된대로 객체의 정보가 반환된 거였다..!!
객체를 출력할 때는 자동으로 toString()을 붙여 출력되며, 객체에 toString을 사용하면 위 사진처럼 객체의 정보가 리턴되는 것이었다! 그래서 toString()을 사용하고 싶으면 오버라이딩을 통해 재정의 해서 사용하면 된다.
이때 protected나 public으로 설정해야 오버라이딩이 가능하다!
내 코드가 저렇게 출력된 이유는 toString()이 배열 내 원소를 스트링화 한 것이 아니라, 배열 자체를 문자열로 변환했기 때문이다.
'코딩테스트 > 프로그래머스 Lv.0' 카테고리의 다른 글
[프로그래머스] 문자 개수 세기 ( 대소문자 판별, 배열 값 채우기 ) - JAVA (0) | 2023.07.21 |
---|---|
[프로그래머스] 접미사 배열 (Arrays.sort()) - JAVA (0) | 2023.07.13 |
[프로그래머스] 9로 나눈 나머지 (char to int) - JAVA (0) | 2023.07.12 |
[프로그래머스] 카운트 업 (IntStream) - JAVA (0) | 2023.07.10 |
[프로그래머스] 배열 만들기2 ( Array to List, List to Array ) - JAVA (0) | 2023.07.10 |