세로 읽기
문제 설명
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
입출력 예
my_string | m | c | result |
"ihrhbakrfpndopljhygc" | 4 | 2 | "happy" |
"programmers" | 1 | 1 | "programmers" |
나의 풀이
function solution(my_string, m, c) {
let answer = '';
for (let i = 0; i < my_string.length / m; i++) {
answer += my_string[i * m + c - 1];
}
return answer;
}
처음에는 for문이 돌 때마다 my_string을 slice 한 후에 index로 접근하려고 했는데 생각해 보니 굳이 불필요하게 slice를 추가할 필요 없이 문자열의 index로도 원하는 글자에 접근할 수 있었다.
다른 사람의 풀이 01
function solution(my_string, m, c) {
return Array.from(my_string).reduce((word, v, i) => {
return i % m + 1 === c ? word + v : word
}, '')
}
Array.form으로 기존 my_string을 배열로 변경한 후에 reduce 메서드를 이용해서 삼항연산자의 조건이 true일 경우에만 reduce의 초기값에 해당 문자열을 더해준다.
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
- Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array 객체를 만듭니다.
다른 사람의 풀이 02
function solution(my_string, m, c) {
return [...my_string].filter((_, i) => i % m === c - 1).join('');
}
위의 풀이와 조건문은 동일한데 reduce 대신 filter 메서드를 이용했다.
'알고리즘 > Programmers' 카테고리의 다른 글
[TIL] 2023.05.30 Programmers_문자열 겹쳐쓰기 (0) | 2023.05.30 |
---|---|
[TIL] 2023.05.30 Programmers_리스트 자르기 (0) | 2023.05.30 |
[TIL] 2023.05.22 Programmers_접미사인지 확인하기 (0) | 2023.05.22 |
[TIL] 2023.05.17 Programmers_수열과 구간 쿼리 2 (0) | 2023.05.17 |
[TIL] 2023.05.15 Programmers_배열 만들기2 (0) | 2023.05.15 |
댓글