728x90
문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_str의 길이 ≤ 100
- 1 ≤ n ≤ my_str의 길이
- my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.
입출력
| "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"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.
public static String[] solution(String my_str, int n) {
int startIdx = 0;
int endIdx = n;
List<String> list = new ArrayList<String>();
for(int i=0; i<Math.ceil(my_str.length()/(float)n);i++) {
list.add(my_str.substring(startIdx, endIdx));
startIdx += n;
if(endIdx + n > my_str.length()) endIdx = my_str.length();
else endIdx += n;
}
String[] answer = new String[list.size()];
// Iterator it = list.iterator();
// int idx = 0;
// while(it.hasNext()) {
// answer[idx++] = (String)it.next();
// }
for(int i=0; i<list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
1. n만큼의 문자열을 자를 때는 String클래스의 subString(int, int)를 사용해서 잘랐다.
하나를 자르면 그 다음 n만큼의 길이만큼 또 잘라야하므로 시작포인터와 끝포인터가 필요해서 startIdx와 endIdx를 선언해주었고 배열을 한 번 자를 때마다 startIdx는 +n만큼 증가시켜주면 되지만 endIdx는 my_str의 길이를 넘어가는 경우가 생길 수 있어서 먼저 조건문으로 endIdx + n한 것이 my_str길이를 넘지 않으면 +n을 하고 만약 넘게 되면 endIdx에 my_str의 길이를 넣어주면 된다.
2. my_str을 몇 번 자를 것인가도 생각해 봐야했다.
나 같은 경우는 my_str의 길이에서 n을 나눈 후 그 결과를 Math.ceil()에 넣어서 무조건 반올림 하게끔 만들었다.
문자열의 길이가 4이고 n이 3이면 1.3333...인데 결국 2개의 배열이 필요하기 때문에 뒤에 소수점이 나오는 경우는 무조건 올림으로 만들어 주었고 소수점 결과를 얻으려면 my_str.length() / n 둘 중에 한 곳을 실수형으로 만들어주는 것 잊지말자
다른 사람들의 풀이를 보았을 때 처음부터 몇 번 자를 것인지를 구해놓고 시작하면 굳이 list를 만들지 않아도 되서 좀 더 처리 속도가 빨라 보였다.
반응형
'CodingTest > Programmers' 카테고리의 다른 글
| [프로그래머스] Lv0 컨트롤 제트 (1) | 2023.01.19 |
|---|---|
| [프로그래머스] Lv0 영어가 싫어요*** (0) | 2023.01.12 |
| [프로그래머스] Lv0 소인수분해 (0) | 2023.01.11 |
| [프로그래머스] Lv0 공 던지기* (0) | 2023.01.10 |
| [프로그래머스] Lv0 숨어있는 숫자의 덧셈 (2) (0) | 2023.01.09 |
댓글