본문 바로가기
프로그래머스/Lv. 0

[Java/자바] 프로그래머스 Lv. 0 문자열의 뒤의 n글자

by 감자감자곰 2023. 7. 21.

문제

문자열 my_string 정수 n 매개변수로 주어질 , my_string 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

제한사항

  • my_string은 숫자와 알파벳으로 이루어져 있습니다.
  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ n ≤ my_string 길이

입출력 예

my_string n result
"ProgrammerS123" 11 "grammerS123"
"He110W0r1d" 5 "W0r1d"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string에서 뒤의 11글자는 "grammerS123"이므로 이 문자열을 return 합니다.

입출력 예 #2

  • 예제 2번의 my_string에서 뒤의 5글자는 "W0r1d"이므로 이 문자열을 return 합니다.

Solution.java

class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        char[] my_stringC = my_string.toCharArray();

        for(int i=0; i<n; i++){
            answer += my_stringC[my_stringC.length-n+i];
        }

        return answer;
    }
}

문자열(string)로 주어진 my_string을 문자(char) 배열인 my_stringC로 바꾼 후, for 문을 통해 배열의 값에 접근하며 answer를 생성하고 최종으로 return 하는 방법을 생각해 문제를 풀었다. 특히 for 문의 내부를 작성할 때 신경을 썼다.

 

예시로 주어진 'ProgrammerS123'의 경우 문자 배열의 길이는 14, n은 11, answer에 들어가야 하는 부분은 index 3~13이었다. 우선 for 문에서 i의 값 설정을 통해 내부가 총 11번(i가 0~10일 때) 실행되도록 했다. answer의 전체 길이(11)의 설정을 완료한 셈이다. 그리고 내부에서 my_stringC의 index 3~13을 answer에 넣어야 하기에 my_stringC.length-n+i라는 부분을 my_stringC의 index로 작성해 주었다.

 

이렇게 수학적으로 접근해 코드를 작성했을 때에도 테스트 케이스까지 잘 작동되었지만, 다른 사람들의 코드를 보니 굉장히 간결하게 작성된 경우가 많아 사람들이 가장 많이 작성한 코드를 가져와보았다.

class Solution {
    public String solution(String my_string, int n) {
        return my_string.substring(my_string.length() - n);
    }
}

자바의 substring() 메소드를 사용해 문자열을 자르는 방법을 사용한 코드였다. 메소드의 int 형의 인자값은 '문자열의 앞에서부터 몇 번째 위치인가'를 의미하며, substring() 메소드는 입력받은 인자값을 index로 해당 위치를 포함해 이후의 모든 문자열을 return 한다고 한다.

 

즉, 주어진 문제에서 '(문자열의 전체 크기) - n = (answer의 첫 번째 index 값)'이기에 이를 substring()의 인자로 주면 간단하게 해결되는 것이다.

 

substring() 메소드를 활용할 줄 몰라 번거롭게 문제를 해결했는데, 이번 기회를 통해 공부할 수 있었다 :)

댓글