본문 바로가기
알고리즘/Programmers

[TIL] 2023.05.26 Programmers_세로 읽기

by heereal 2023. 5. 27.

세로 읽기

문제 설명

문자열 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 메서드를 이용했다.

 

 

 

댓글