long 타입 변수 n을 입력받아 각 자릿수를 큰 순서대로 재배치하여 반환하는 문제이다. solution을 보며 설명하도록 하겠다.
필자는 long 타입 변수 n에 저장된 값을 내림차순으로 반환을 하기 위해서 배열에 저장하고, 오름차순으로 정렬해주는 sort() 함수를 사용해 배열 arr을 정렬하였다. 5번째 줄의 코드는 아래 2줄의 코드를 줄여서 표현한 것이다.
앞서 한 번 이야기를 한 적이 있지만 같은 클래스의 메서드라면 온점(.)을 찍어 메서드를 이어 붙여 사용할 수 있다. 하지만, 'Long.toString(n)' 은 Long 클래스의 메서드인데 어떻게 같이 사용을 한다는 건지에 대한 의문을 가질 수 있다. 이는 Long.toString(n);이라는 문장을 수행함으로써 String 타입이 되었고, 여기에 바로 String 클래스 메서드인 split()을 이어 붙여 사용한 것이다. 이런 식으로 이어 붙여 사용이 가능한 메서드들은 붙여서 사용하는 것이 더욱 간결한 코드를 작성하는 방법 중 하나이다.
이어서 9~11번째 줄의 코드를 살펴보면 7번째 줄에서 작성한 String 타입 배열 num에 sort()가 된 배열 arr의 맨 뒤 인덱스부터 역순으로 num에 대입 연산하는 것을 볼 수 있다. sort()는 오름차순의 정렬이기 때문에 문제에서 요구하는 내림차순으로의 반환을 위해서는 역순으로 대입을 해주어야 한다. 이렇게 for문이 끝나면 배열 num에는 long 타입 변수 n으로부터 입력받았던 값이 내림차순으로 각 인덱스에 하나씩 저장되어 있을 것이다. 이를 바로 반환하면 좋겠지만 solution 함수의 반환 타입은 long이다. 그렇기 때문에 배열 num을 다시 long타입으로 변환을 해주어야 하는데, 배열을 다시 String 타입으로 변환하는 메서드인 join()을 사용할 것이다. join() 메서드의 사용법은 'String.join("", 배열 이름);'인데 큰 따옴표("") 안에는 배열의 각 인덱스에 저장된 요소들 사이에 넣을 것을 쓸 수 있다. 예시로 'String.join("-", num);'을 한다면 num의 각 인덱스에 저장된 값들 사이에 -를 넣어 join을 할 것이다. 이렇게 join() 메서드를 통해 String 타입으로 변환된 값을 최종 반환 타입인 long으로 변환을 해주면 되는데, 이는 'Long.parseLong()' 메서드를 사용하여 가능하다. 이렇게 11번째 줄까지 수행을 하게 되면 answer에 n으로 받았던 값이 내림차순으로 저장이 되고 이를 반환하여 solution이 완성된다.
========== 느낀 점 ==========
아직까지는 나름 순탄(?)하게 level 1의 문제들을 풀고 있기는 하나몇 문제는 해결이 잘 되지 않는 것들도 있다. 많지는 않은 것이 다행이지만 이건 level 1,,, 아직 부족한 것은 나 스스로도 잘 알고 있지만 이럴 때마다 나의 대학생활 4년이 허무한 느낌이 들기도 한다. 무엇을 했을까,, 그래도 시작을 했고 하고 있다는 것이 중요한 것이기 때문에 계속 꾸준히 해보려고 한다. 그리고 solution을 완성하고 다른 사람들의 간결한 풀이들을 보면서 한 가지 습관이 생겼는데, 문제를 해결한 후 더 짧은 문장으로 줄일 수 있는 것이 있는지에 대해 검토를 하게 되었다. 보기에는 그럴 수도 있지만 결코 코드가 짧다고 좋고 간결한 코드는 아니다. 코드의 효율성이 좋아야 한다. 하지만 아직까지는 그런 효율적인 측면까지 파악을 하는 것은 어려운 것 같다. 어쨌든 검토를 하는 이런 습관은 나름 좋은 것 같다!! 내일도 파이팅 해야겠다.
으아아아아아아아아아!!!!!!!!
'알고리즘' 카테고리의 다른 글
프로그래머스 - 문자열 다루기 기본 (0) | 2022.02.04 |
---|---|
프로그래머스 - 약수의 합 (0) | 2022.02.03 |
프로그래머스 - 평균 구하기 (0) | 2022.01.25 |
프로그래머스 - 핸드폰 번호 가리기 (0) | 2022.01.24 |
프로그래머스 - 자릿수 더하기 (0) | 2022.01.21 |