ejyoo's 개발 노트

[프로그래머스-코딩기초트레이닝] 문자열변환 본문

문제풀이/코드프로그래머스 문제풀이

[프로그래머스-코딩기초트레이닝] 문자열변환

ejyoovV 2023. 10. 12. 01:44

https://school.programmers.co.kr/learn/courses/30/lessons/181952

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제]
정수 n이 주어질 때, n을 문자열로 변환하여 return하도록 solution 함수를 완성해주세요.
[제한사항]
1 ≤ n ≤ 10000
[입출력예]
- 입출력 예 #1
123을 문자열로 변환한 "123"을 return합니다.
- 입출력 예 #2
2573을 문자열로 변환한 "2573"을 return합니다.

 

내가 입력한 답

나는 Java에서 제공하는 기본 메서드를 활용하여 문제를 해결하였다.

class Solution {
    public String solution(int n) {
        String answer = Integer.toString(n);
        return answer;
    }
}

다른 풀이 보기

다른 사람이 푼 답안을 보다가 신기한 것을 발견했다.

String answer = "" + n;

이 방법은 자바에서의 문자열 연결 특성을 활용한 것이다.

빈 문자열 ("")에 문자열 연결 연산자 '+'를 사용하여 문자열로 자동 변환되도록 하였다.

'+' 문자열 연결 연산자는 문자열과 다른 데이터 타입(int, double 등)이 '+' 연산자로 만나게 되면, 

그 데이터 타입은 문자열로 자동으로 변환된다.

 

따라서 위의 "" + n 는 n을 문자열로 변환하고 빈 문자열에 연결하는 것과 같으므로 결과적으로 n이 문자열로 변환되는 것이다.

 

무엇이 더 좋을까? (개인적)

나는 명확한 Integer.toString(n)이 좋은 것 같다.

""+문자열 은 코드가 짧아서 간결하지만, 직관적이지 않다.

 

연산 측면에서 성능은?

String answer = "" + n; 과 String answer = Integer.toString(n); 은 기본 연산이라서 이러한 생각이 무의미 할 수 있다.

그래서 각각이 수행되는 '원리' 에 대해 생각해볼 필요는 있을 것 같다.

String answer = "" + n; 방식은,

빈 문자열과 정수를 연결하기 위해 문자열 연결 연산이 필히 발생된다.

자바 내부에서 StringBuilder나 StringBuffer를 객체를 생성하고 문자열 연산을 수행한다.

반면에 String answer = Integer.toString(n); 은 직접적인 변환 메서드이기 때문에 추가적인 객체 생성이 없다.

위의 원리를 보았을 때 데이터가 1억개정도라면.. String answer = Integer.toString(n); 방식이 더 빠르지 않을까 싶다.

실제 성능 차이는 JVM 최적화나 설정 그리고 컴퓨터 사양에 따라 달라지지 않을까..?

 

만약에 정수가 아닌 것이 온다면? 어떻게해야할까?

문제는 정수만 언급했는데 만약에 정수가 아니라면?

그럴때는 String.valuesOf(n) 를 사용하면 된다.

String answer = String.valueOf(n);

Integer.toString(n) 과는 기능적인 차이가 없지만, (둘 다 정수를 문자열로 변환하는 작업)

차이점은 String.valueOf(n) 가 더 범용적이다.

이 메서드는 n에 다양한 타입의 인수 (boolean, char, float, int, long 등)를 받고, 문자열로 변환할 수 있어서 일관성을 유지할 수 있다.

 

 

 

그렇지만,

문제에서는 '정수' 만을 문자열로 변환한다고 했으니, Integer.toString(n)을 사용하는게 더 직관적인 것 같다.