[プログラマー]Lv 1楽透の最高と最低ランキング


質問リンク
https://programmers.co.kr/learn/courses/30/lessons/77484
input & output
lottoswin_numsresult[44, 1, 0, 0, 31, 25][31, 10, 45, 1, 6, 19][3, 5][0, 0, 0, 0, 0, 0][38, 19, 20, 40, 15, 25][1, 6][45, 4, 35, 20, 3, 9][20, 9, 3, 45, 4, 35][1, 1]
Approach #1

알아볼수 없는 번호 : 0
구매한 로또 번호 : 44, 1, 0, 0, 31 25
당첨 로또 번호 : 31, 10, 45, 1, 6, 19
1,31 2개 일치. 
알아볼수 없는 2개의 번호(0,0)를 각각 10,6이라고 가정하면 3등(4개 일치)까지 당첨 가능.
                              11,7이라고 가정하면 5등(2개 일치)까지 당첨 가능
                              return [3,5]
                              
[45, 4, 35, 20, 3, 9]
[20, 9, 3, 45, 4, 35]
-> 45,4,35,20,3,9 다 일치 (1등)

for문:
lottos[i]와 win_nums[j]를 비교. 같으면 sameCnt++;
lottos[i]===0 이면 zeroCnt++;

function calRank(sameCnt)
rank = 7-sameCnt
if(rank<5) return rank
else return 6

if(zeroCnt===0)이면 rank = calRank(sameCnt)
return [rank, rank];

else 이면 
minRank=calRank(sameCnt);
maxRank=calRank(sameCnt+zeroCnt);
return [minRank, maxRank]
Solution #1
function solution(lottos, win_nums) {
    var answer = [];
    let zeroCnt = 0, sameCnt = 0;
    for(let i=0; i<lottos.length; i++){
        let curNum = lottos[i];
        if(curNum===0){
            zeroCnt++;
            continue;
        }
        for(let j=0; j<win_nums.length; j++){
            if(curNum === win_nums[j]) sameCnt++;
        }
    }
    if(zeroCnt === 0){
        let rank = calRank(sameCnt);
        answer = [rank, rank];
    }
    else {
        let lowRank = calRank(sameCnt);
        let highRank = calRank(sameCnt+zeroCnt);
        answer = [highRank, lowRank];
    }
    return answer;
}

function calRank(sameCnt){
    let rank = 7 - sameCnt;
    return rank < 6 ? rank : 6;
}
N: lottos.length, win_nums.lenght(문제에서는 6)Time Complexity
O(N^2)
サイズ6のlottos配列とwin nums配列を2つのfor文に変換するため,時間複雑度は以下のようになる.
Space Complexity
O(1)
答え配列の大きさは2(高Rank,低Rank)に固定されているため,空間複雑度はO(1)である.
Review
  • 題を理解し、擬似コードを記述し、最終コードを記述するのに約20分かかります.問題は簡単だから大丈夫!
  • 回の運賃は最初は逆だったのですが、なぜ負けるのか分かりませんが、元々は高Rankと低Rankが逆になっているからです.こんな間違いを犯すなんて、、、
  • 初めてRankを計算した時に6個当てたら1 5個なら2...このように無知に論理を編んで、解く時考えて、もし7の中で正しい個数を取り除くならば、rankが現れて、急いで修正して、、、ははは.时には无知が答えだけど...今日は違います.
  • TIL
    新しく書かれた関数
  • はありません.他の解答を参考にしてから書いてください.時間の複雑さを減らす過程で、新しい解答や概念が適用されたのかもしれません.
  • Approach #2
    Solution #2
    Time Complexity
    Space Complexity