| 문제 설명 ❓
문자열 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"] |
| 입출력 예 설명 💬
입출력 예 #1
- "abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return 해야 합니다.
입출력 예 #2
- "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return 해야 합니다.
| 유의 사항⚠️
- 입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두 개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.
| 풀이 🔥
⚠️ 한 번씩 읽어주세요 ⚠️
제 개인의 풀이 방법이며 틀린 풀이 방법 일수도, 더 나은 풀이법이 존재할 수도 있습니다!
전체 코드는 깃헙 링크 혹은 하단 접은 글을 펼쳐 확인가능하며, 복붙이 아닌 참고용 코드입니다
이 문제는 단순하게 입력받은 n만큼 문자열을 Substring 나누면 되는 문제인 줄 알고 시도했으나, 역시나 문자열의 길이가 n으로 나누어 떨어지지 않는 경우가 존재했습니다. 그래서 시도한 방법은 Substring으로 자르는 범위를 정할 때 시작 지점에서 n만큼 자를 때 마지막 범위가 문자열의 길이를 넘어갔을 때를 처리하는 방식으로 진행했습니다. 자세한 설명은 전체코드의 주석을 참고해 주시면 될 거 같습니다.
[깃헙 / Github]
😻 댓글과 공감 한 번씩 감사드립니다 😻
| 전체 코드 🔎
더보기
using System;
public class Solution {
public string[] solution(string my_str, int n) {
string[] answer = new string[] {};
// SplitString함수 리턴값을 받아온다.
answer = SplitString(my_str, n);
return answer;
}
public string[] SplitString(string str, int n)
{
// 리턴할 배열의 크기를 정한다.
// str의 길이에서 n을 나누었을때
// 나머지 == 0 길이 = str.Length / n;
// 나머지 != 0 길이 = str.Length / n + 1
// Ex) str = "abc1Addfggg4556b" (16), n =6
// -> 16 % 6 = 2.6666... | 0이 아님
// -> 16 / 6 = 2 + 1
// -> 3
int len = (str.Length % n == 0) ? str.Length / n : str.Length / n + 1;
// Substring할때 잘리기 시작하는 인덱스
int startIdx = 0;
// Substring할때 startIdx에서 얼마만큼 자를지
int splitLen = 0;
// 결과 값을 리턴할 배열
string[] retValue = new string[len];
// len의 길이 만큼 반복한다.
for(int i = 0; i < len; i ++)
{
// startIdx의 값을 정한다
// Ex) n = 6 -> i값 (0,6,12...)
startIdx = i * n;
// splitLen의 값을 정한다.
// startIdx에 n만큼 더한 값이 문자열의 길이와 비교하여
// 작거나 같다면 n, 크다면 n-((startIdx + n) - str.Length)
// Ex) str = "abc1Addfggg4556b", startIdx (0,6,12..) n = 6
// -> startIdx = 0 | 0 <= 12 | 6
// -> startIdx = 6 | 12 <= 12 | 12
// -> startIdx = 12 | 18 <=12 | 6 - ((12 + 6 ) - 16)
// -> 4
splitLen = (startIdx + n <= str.Length) ? n : n - ((startIdx + n) - str.Length) ;
// str을 startIdx부터 splitLen만큼 자른다.
retValue[i] = str.Substring(startIdx,splitLen);
}
// 결과를 리턴한다.
return retValue;
}
}