■ 문제
문자열 my_string이 매개변수로 주어집니다.
my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.
답안 예시 : my_string = 'apple' -> 결과값 : elppa이 나와야 함
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder(my_string);
String reversedStr = sb.reverse().toString();
return reversedStr;
}
}
💻 [ 내가 짠 코드 분석 ]
해당 문제는 문자열에 관련된 함수가 어떤게 있는지 알아보기 위한 문제였다.
문자열을 뒤집기 위해 StringBuilder를 사용할 수 있다.
본디 String 문자열 객체는 변경 불가능하다. 한 번 생성되면 내용을 바꿀 수 없다.
But, ⭐ StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에, String을 합치는 작업 시 하나의 대안이 될 수 있다.
매개변수로 받은 my_string값을 StringBuilder객체에 담아주게 되면 변경 가능한 문자열이 되는 것이다.
StringBuilder객체인 sb.reverse()함수를 사용하면 문자열을 뒤집어 새로운 String값을 뽑아 낼 수 있고, 값을 뽑을 때에는 반드시 toString()을 붙여 String형 변환을 해주어야한다, String 변수에 넣을 때도 마찬가지다.
※ toString()은 명시적으로 호출하기 보다는 문자열과 합칠 때 자동 변환 용도로 더 많이 사용됨.
사용자 정의 클래스의 인스턴스 역시 Object 타입을 상속하기 때문에 따로 정의하지 않아도 toString() 메서드가 정의되어 있다. 당연히 Object에 있는 것과 같은 것!!
■ 문제
정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터
num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.
import java.util.Arrays;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
int[] answer = new int[num2];
answer = Arrays.copyOfRange(numbers, num1, num2+1);
return answer;
}
}
💻 [ 내가 짠 코드 분석 ]
해당 문제의 핵심은 배열 자르는 방법을 구현해내는 것이었다.
실제 배열을 자르기 보다 기존 배열을 복사하여 복사한 배열을 결과 값으로 보여주는 것이 방법!
우선 원하는 배열의 길이 만큼 자르기 위해서는 아래와 같은 두 가지 방법이 있다.
1.Arrays.copyOfRange() 의 사용 방법 : Arrays.copyOfRange(배열, 시작점, 끝점)
❗ 여기서 주의할 점은 끝점을 포함하지 않고 이전까지만 배열의 복사가 이루어 진다.
2.System.arraycopy()의 사용 방법 : System.arraycopy(배열, 복사시작점, 복사후배열, 복사끝점, 복사할 배열의 length)
■ 문제
정수 n이 매개변수로 주어질 때
n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요
import java.util.ArrayList;
class Solution {
public int solution(int n) {
ArrayList<Integer> alist = new ArrayList<Integer>();
int result = 0;
while(n > 0){
//나머지
alist.add(n%10);
//몫
n = n/10;
}
for(int i:alist){
result += i;
}
return result;
}
}
💻 [ 내가 짠 코드 분석 ]
해당 코드는 정수의 몫과 나머지를 이용하여 각자리의 값을 합한 결과를 도출해내는 과정이 중요했다고 생각한다.
이번에는 ArrayList를 사용하여 파라미터 값으로 받은 정수 n을 % 10 으로 나누게 되면 나머지 값이 해당 정수의 자리 수를 의미하게 된다. n / 10은 몫으로서 계속해서 나누어야 할 값을 남겨두게 된다.
ArrayList에 값을 추가하려면 .add() 메소드를 사용해서 값을 추가하면 되고, 마지막 향상된 for문을 돌려 ArrayList에 추가 된 값들을 하나하나 씩 더해주어 마지막 result결과 값을 도출해내면 끝!!
알고리즘은 확실히 문제를 많이 접해보고 풀어봐야 원리에 대한 이해가 쉽게 되는 것 같다.
'컴퓨터 프로그래밍 > 알고리즘' 카테고리의 다른 글
[프로그래머스] Lv0. 최대값 만들기 (0) | 2022.11.21 |
---|---|
[프로그래머스] Lv0. 배열 뒤집기 (0) | 2022.11.21 |
[프로그래머스] Lv0. 최대값과 최소값 구하기 (0) | 2022.11.21 |