잘라서 배열로 저장하기
https://school.programmers.co.kr/learn/courses/30/lessons/120913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1) 문제
1 ≤ my_str의 길이 ≤ 100
1 ≤ n ≤ my_str의 길이
my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
2) 예시
my_str | n | result |
---|---|---|
"abc1Addfggg4556b" | 6 | ["abc1Ad", "dfggg4", "556b"] |
"abcdef123" | 3 | ["abc", "def", "123"] |
입출력 예 #1
"abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.
입출력 예 #2
"abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.
유의사항
입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다.
이런 경우 남은 문자열을 그대로 배열에 저장합니다.
3) 풀이
1. 클래스 선언을 해줍니다
● class Solution {
클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 문자열 my_str과 정수 n를 매개변수로 하는 solution 메소드를 선언합니다.
solution은 문자열 배열를 반환하므로 데이터타입을 String[]으로 합니다.
● public String[] solution(String my_str, int n) {
3. 우선 my_str의 문자열 길이를 strLength,
그리고 새롭게 만들 배열의 길이를 arrayLength로 정의합니다.
arrayLength는 n씩 나누었을 때 올림해주기 위해 (strLength -1)의 값에 n을 한번 더 더해준 것입니다.
● int strLength = my_str.length();
int arrayLength = (strLength + n -1) / n;
4. 정답이 될 문자열배열 answer를 생성하고, 그 길이는 arrayLength로 합니다
● String[] answer = new String[arrayLength];
5. 배열의 원소의 시작점start 와 끝점 end를 구합니다.
시작점은 n씩 나눠지니 i * n으로 합니다.
끝점은 시작점에서 n을 더한 값과 strLength(문자열길이)를 비교했을 때 더 작은 값으로 합니다.
이유는 start+n을 하였을 때 그 값이 문자열의 길이를 초과할 수 있기 때문에 제한을 두기 위함입니다.
substring메소드를 이용(substring(시작점,끝점)하면 그 사이 문자열만 추출됩니다.)하여 answer의 i번째 요소를 구합니다.
최종적으로 결과값 answer를 반환합니다.
● for(int i=0; i < arrayLength; i++){
int start = i * n;
int end = Math.min(start + n, strLength);
answer[i] = my_str.substring(start, end);
}
return answer;
}
}
4) 코드
class Solution {
public String[] solution(String my_str, int n) {
int strLength = my_str.length();
int arrayLength = (strLength + n -1) / n;
String[] answer = new String[arrayLength];
for(int i=0; i < arrayLength; i++){
int start = i * n;
int end = Math.min(start + n, strLength);
answer[i] = my_str.substring(start, end);
}
return answer;
}
}
5) 느낀점
substring 메소드를 이용할 수 있는 좋은 기회였습니다.
다만 처음에 문제 해결을 어떻게 할지 굉장히 많은 고민이 있었습니다.
새로이 배열을 생성해야한다는점, StringBuilder를 이용해서 해결해보려했던점 등 고민이 많았던 문제였습니다.
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120860] Java - 코딩테스트 입문 / 직사각형 넓이 구하기 (0) | 2024.05.05 |
---|---|
[프로그래머스 120861] Java - 코딩테스트 입문 / 캐릭터의 좌표 (0) | 2024.04.30 |
[프로그래머스 120912] Java - 코딩테스트 입문 / 7의 개수 (0) | 2024.04.30 |
[프로그래머스 120862] Java - 코딩테스트 입문 / 최댓값 만들기 (2) (1) | 2024.04.28 |
[프로그래머스 120911] Java - 코딩테스트 입문 / 문자열 정렬하기 (2) (0) | 2024.04.28 |