탄탄대로
[Level 0] 잘라서 배열로 저장하기 본문
- 좀 더 공식을 만드는 방향으로 방법을 생각했으면 좋겠다...! ㅠㅠ
문제 설명
문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_str의 길이 ≤ 100
- 1 ≤ n ≤ my_str의 길이
- my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
입출력 예
my_str | n | result |
"abc1Addfggg4556b" | 6 | ["abc1Ad", "dfggg4", "556b"] |
"abcdef123" | 3 | ["abc", "def", "123"] |
풀이
class Solution {
public String[] solution(String my_str, int n) {
int len = my_str.length();
int q = len / n;
int r = len % n;
//나머지가 있으면 배열을 하나 더 생성하기 위해 q에 1을 더함
if(r > 0){
q += 1;
}
//배열 생성
String[] answer = new String[q];
//반복문으로 문자열을 자른 후 배열에 넣기
for(int i = 0; i < q; i++){
//맨 마지막 순서인데 나머지가 있을 경우 자를 갯수 변경
if(i == q-1 && r > 0){
n = r;
}
//문자열 자르기
answer[i] = my_str.substring(0, n);
//자른 문자열을 기존 문자열에서 삭제
my_str = my_str.replaceFirst(answer[i], "");
}
return answer;
}
}
나는 주어진 문자열을 자르고, 자른 만큼 문자열에서 지워 substring()의 시작 값을 계속 0으로 둘 수 있게 짰다.
좀 어린애 같은 코드다...ㅠㅠ
좀 더 수학 공식같은 코드를 짤 수 있을 것 같은데..! 그 코드가 아래 코드다.
다른 풀이
class Solution {
public String[] solution(String my_str, int n) {
//나눠서 나머지가 있으면 몫에 1을 더해 배열 크기 및 반복 될 수를 구함
int cnt = my_str.length() % n > 0 ? my_str.length() / n + 1 : my_str.length() / n;
//배열 생성
String[] answer = new String[cnt];
//문자열을 잘라 배열에 넣기
for(int i = 0; i < cnt; i++){
//문자열을 자를 시작 기준값
int start = n * i;
//문자열을 자를 끝 기준값
//마지막 순서일 경우 문자열의 길이를 넘어가기 때문에 문자열 길이로 설정
int end = start + n >= my_str.length() ? my_str.length() : start + n;
//배열에 자른 문자열 넣기
answer[i] = my_str.substring(start, end);
}
return answer;
}
}
좀 더 공식을 만든다는 생각으로 코드를 써보자!!
문제 출처
- 프로그래머스
'코딩테스트' 카테고리의 다른 글
[Level 1] 햄버거 만들기 (0) | 2022.11.04 |
---|---|
[Level 0] 다음에 올 숫자 (0) | 2022.10.24 |
[Level 0] 연속된 수의 합 (0) | 2022.10.24 |
[Level 0] 옹알이 (0) | 2022.10.12 |
[Level 1] 정수 내림차순으로 배치하기 (0) | 2022.08.01 |