티스토리 뷰

반응형

■ 문제

원본 사이트: https://www.hackerrank.com/challenges/alternating-characters/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=strings 

 

Alternating Characters | HackerRank

Calculate the minimum number of deletions required to convert a string into a string in which consecutive characters are different.

www.hackerrank.com

 

난이도: Easy

최대 스코어: 20

 

● 문제 요약

  • 문자 'A' 또는 'B'로만 구성된 문자열 S 제공
  • 동일한 문자가 연속되서 나오지 않도록 문자열 변경 필요
  • 삭제해야하는 최소 문자 수 return

 

예시:

s = AABAAB
  • 1번 째에 위치한 'A' 제거  --> s = ABAAB
  • 4번 째에 위치한 'A' 제거  --> s = ABAB

==> return 2

 

 

■ 문제 풀이

이 문제는 문자열이 'A' 또는 'B'로만 구성되어 있어서 쉽게 해결했다.

우선 편하게 풀기 위해 문자열 S를 array로 변경했다.
그런 다음 pre 라는 변수에 이전 문자를 저장해놓고, 배열 전체를 돌며 현재 문자가 이전 문자와 같으면 ++,
이전 문자와 같지 않으면 이전 문자를 현재 문자로 바꾸고 넘어간다.

reduce를 활용해서 제거해야하는 문자의 수를 카운트하고 바로 return 했다.

 

● 완성 코드 - 20 Points (Max)

'use strict';

const fs = require('fs');

process.stdin.resume();
process.stdin.setEncoding('utf-8');

let inputString = '';
let currentLine = 0;

process.stdin.on('data', function(inputStdin) {
    inputString += inputStdin;
});

process.stdin.on('end', function() {
    inputString = inputString.split('\n');

    main();
});

function readLine() {
    return inputString[currentLine++];
}

/*
 * Complete the 'alternatingCharacters' function below.
 *
 * The function is expected to return an INTEGER.
 * The function accepts STRING s as parameter.
 */

function alternatingCharacters(s) {
    // Write your code here
    const arrayS = s.split('');
    let pre = '';
    
    return arrayS.reduce((acc, cur, idx) => {
        if(arrayS[idx] === pre){
            acc++;
        }
        else{
            pre = arrayS[idx];
        }
        return acc;
    }, 0)
}

function main() {
    const ws = fs.createWriteStream(process.env.OUTPUT_PATH);

    const q = parseInt(readLine().trim(), 10);

    for (let qItr = 0; qItr < q; qItr++) {
        const s = readLine();

        const result = alternatingCharacters(s);

        ws.write(result + '\n');
    }

    ws.end();
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함