문제 설명
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
🙋♀️ 내 생각
가로로 m글자씩 적고, 세로의 c번째값들만 추출해서 하나의 문자열을 만드는 것이 목표이다.
위의 첫번째예시를 기준으로 예를 들어서 이해한 것을 정리하면,
4글자씩 가로로 적고 2열의 값들만 추출한다. (결과값: "happy")
규칙을 찾아보면, 인덱스는 m만큼씩 차이가 난다
(h와 a의 인덱스는 m만큼 차이난다. a와 p도, p와 p도, p와 y도 m만큼의 차이이다.)
인덱스가 일정하게 증가하는 규칙을 이용해서 풀어보았다.
✅ 내 코드
function solution(my_string, m, c) {
let result =''
for(i=c-1; i<my_string.length; i += m){
result += my_string[i]
}
return result
}
문자열을 더한 결과값을 얻을 변수를 result라고 지어주고 ''빈문자열로 string타입으로 초기값을 설정한다.
(문자열을 더한 값을 최종적으로 얻을 것이기때문에)
그런다음, for문을 이용해서 i의 범위를 지정한다.
c는 1,2,3..이런식으로 열을 지정하지만 인덱스는 0부터 시작한다.
c=1 이면 실제인덱스=0
c=2 이면 실제인덱스=1
c=3 이면 실제인덱스=2...
➡️ c는 (실제인덱스-1)인것을 알 수 있다.
그래서 초기값 i를 i = c-1로 설정한다.
(위의 예제1를 기준으로 예를 들면 c=2이므로 2열에 있는 값만을 추출할 의도이기때문에 i=1로, 1번째 인덱스에 있는 값들만을 추출할 수 있다.)
그 다음으로 추출해야 할 값은 위에 적은 규칙과 같이 인덱스의 차이가 m만큼씩이다.
따라서 for문을 한번 돌때마다 m씩을 더한다. i +=m
for문 안에서는 +=복합할당연산자를 이용하여 result에 my_string의 i번째 인덱스에 있는 값들만을 추출해서 축적시킨다.
이렇게하면 초기값인 c-1인덱스에서 시작하여 인덱스값이 m만큼차이나는 값들만을 for문을 돌면서 result에 축적시킬 수 있다.
💻 다른사람 코드중에 배울 것
function solution(my_string, m, c) {
var answer = '';
for(let i = 0; i < my_string.length; i += m) {
answer += my_string[i + c - 1]
}
return answer;
}
전반적인 방법은 같지만 i의 범위를 지정하는 방식이 달라서 공부해보았다.
나는 i의 초기값을 c-1로 설정한것과 달리,
이 코드는 초기값을 0으로 지정하였다.
대신, expression에서 my_string[i]가 아니라 my_string[i + c -1]의 값을 더한다.
i +=m으로 m만큼씩 커지면서 for문을 도는것은 동일하다.
위의 예제1를 예로 이해하면,
i=0일때 (0 + 2 - 1)=1
i=4일때 (4 + 2 -1 ) =5
i=8일때 (8 + 2 -1 )=9
(m은 4씩 커지므로)
인덱스로 적어보면
0 1 2 3
4 5 6 7
8 9 10 11
이다. 여기서 1, 5, 9의 열은 2로 고정되어있다.
m을 일정하게 커지게 하면서 (4씩 커지게 -> 0,4,8...)
💻 다른사람 코드중에 배울 것
function solution(my_string, m, c) {
return [...my_string].filter((_, i) => i % m === c - 1).join('');
}
나머지를 이용해서 푼 코드도 있었다.
우선, [...my_string]을 이용해서 문자열을 배열로 만든다. (filter를 이용하기 위해서)
그런 다음 filter의 인덱스를 통해서 원하는 인덱스를 가지고 있는 값들만 남긴다.
m으로 나눈 나머지가 c-1인 것들만 남기고, 마지막으로 배열을 문자열로 다시 바꾸기 위해서 join('')을 해준다.
나머지를 이용해서 풀 생각은 못했는데 이 방법도 간단하고 좋은것같다.
가로의 길이는 어차피 m으로 정해져있으므로, 그 길이를 벗어나는만큼이 열의 값이 될 것이다.
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 순서 바꾸기 JS (slice(), ... 스프레드연산자 Spread Operator / splice() ) (0) | 2023.06.23 |
---|---|
프로그래머스 문자열 뒤집기 JS ( 문자열의 특정부분만 변경 / slice()의 범위 ) (0) | 2023.06.22 |
프로그래머스 문자열 잘라서 정렬하기 JS (split()의 구분자가 문자열 끝에 위치한다면? / match()의 특징 ) (0) | 2023.06.20 |
프로그래머스 부분 문자열 이어 붙여 문자열 만들기 JS ( 배열의 index로 2개의 배열매칭, 중첩배열에서 값추출 ) (0) | 2023.06.20 |
프로그래머스 문자열 섞기 JS ( 복합할당 연산자 += ) (1) | 2023.06.19 |