https://programmers.co.kr/learn/courses/30/lessons/60057

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

https://nodingco.tistory.com/50

 

[JAVA] 프로그래머스 60057.문자열압축 (Lv.2)

https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데.

nodingco.tistory.com

접근 방법은 위의 JAVA 풀이에서 확인할 수 있습니다.

 

JavaScript에서 String을 Array로 바꿔주는 방법은 스프레드연산자, Array.from() 메소드, split()메소드 등 여러가지가 있습니다. 결과는 동일합니다.JavaScript에서 / 연산은 기본적으로 소수점까지 나눠버리기 때문에 몫을 구하고 싶으면 parseInt()로 계산식을 감싸줘야합니다.

 

function solution(s) {
    const strArr = [...s]
    //const strArr = Array.from(s)
    //const strArr = s.split('')

    let answer = strArr.length;

    //console.log(strArr)

    for (let i = 1; i <= strArr.length / 2; i++) {
        let count = i;
        let idx = 0;
        let now = i;
        let duple = 0;
        for (; now < strArr.length - (strArr.length % i); now += i) {
            let flag = true;
            for (var j = 0; j < i; j++) {
                if (strArr[idx + j] !== strArr[now + j]) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                duple = (duple === 0) ? 2 : ++duple;
            } else {
                idx = now;

                if (parseInt(duple / 100) != 0) {
                    count += 3;
                } else if (parseInt(duple / 10) !== 0) {
                    count += 2;
                } else if (duple !== 0) {
                    count++;
                } 
                count += i;
                duple = 0;
            }
            //console.log("count", count, " duple",duple)
        }
        if (parseInt(duple / 100) !== 0) {
            count += 3;
        } else if (parseInt(duple / 10) !== 0) {
            count += 2;
        } else if (duple !== 0) {
            count++;
        } 
        duple = 0;
        //console.log(s,i,count," + ", (strArr.length % i))
        answer = Math.min(answer, count + (strArr.length % i));
    }

    return answer;
}


const input = ["aabbaccc","ababcdcdababcdcd","abcabcdede","abcabcabcabcdededededede","xababcdcdababcdcd"]

for(let i = 0; i < 5; i++){
    console.log(solution(input[i]))
}

//console.log(solution(input[0]))
728x90

https://programmers.co.kr/learn/courses/30/lessons/77484

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

https://nodingco.tistory.com/45

 

[JAVA] 프로그래머스 77484.로또의 최고 순위와 최저 순위 (Lv.1)

https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다..

nodingco.tistory.com

접근 방법은 위의 JAVA 풀이에서 확인할 수 있습니다.

 

function solution(lottos, win_nums) {
    let answer = [0,0];
    const grade = [ 6, 6, 5, 4, 3, 2, 1 ];

    let p = 0;
    let c = 0;

    for (let i = 0; i < 6; i++) {
        if (lottos[i] == 0) {
            p++;
        } else {
            for (let j = 0; j < 6; j++) {
                if (lottos[i] == win_nums[j]) {
                    c++;
                    break;
                }
            }
        }
    }
    
    answer[0] = grade[p+c];
    answer[1] = grade[c];
    
    return answer;
}

lottos = [ 44, 1, 0, 0, 31, 25 ]
win_nums = [ 31, 10, 45, 1, 6, 19 ]

console.log(solution(lottos, win_nums))
728x90

+ Recent posts