HackerRank Algorithm - 2


Tags : WarmUp


HackerRank Warming Up ์ดˆ๋ณด ๋‚œ์ด๋„์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ญˆ-์šฑ ํ’€์–ด๋ณด๊ธฐ

์š”์•ฝ

Prepare/Algorithm/WarmUp

๋ฌธ์ œํ’€์ด ํ‰๊ท ์†Œ์š”์‹œ๊ฐ„ ๋‚œ์ด๋„ ์ฒด๊ฐ๋‚œ์ด๋„ ํ•ด๊ฒฐ๋ชปํ•œ๋ฌธ์ œ
4๊ฐœ ์•ฝ21๋ถ„ easy ์ต์ˆ™ํ•ด์ง 1๊ฐœ

๊ฐ ๋ฌธ์ œ๋ณ„ ํ’€์ด๋ฐฉ์‹ ์š”์•ฝ

์ˆœ๋ฒˆ ๋ฌธ์ œ ์‹œ๊ฐ„ ํ’€์ด๋ฐฉ์‹ ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค ๋น„๊ณ 
1 Apple and Orange 15๋ถ„ for๋ฌธ + &&์กฐ๊ฑด ๋™์ผ ๋ฒ”์œ„์กฐ๊ฑด ์‚ฌ์šฉ๋ถˆ๊ฐ€
2 Number Line Jumps 24๋ถ„ while๋ฌธ + if์กฐ๊ฑด if์กฐ๊ฑด์•ˆ์—์„œ while๋ฌธ timeout์˜ค๋ฅ˜ ์ฃผ์˜
3 Between Two Sets 30๋ถ„ ์ดˆ๊ณผ ๊ฐ๋ฐฐ์—ด 2์ค‘for๋ฌธ ์œ ํด๋ฆฌ๋“œํ˜ธ์ œ๋ฒ• ๋ฌธ์ œํ•ด์„ ์ฃผ์˜
4 Breaking the Records 14๋ถ„ for๋ฌธ + if์กฐ๊ฑด ๋™์ผ ๊ฒฐ๊ณผ ์ถœ๋ ฅ์ˆœ์„œ ์ฃผ์˜

ํ•ด๊ฒฐ๋ชปํ•œ ๋ฌธ์ œ

Between Two Sets

  • ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ์ˆ˜ ๋ฒ”์œ„ ์ •ํ™•ํžˆ ์•Œ๊ธฐ

    These numbers are referred to as being between the two arrays.
    ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๊นŒ์ง€ ํฌํ•จ์„ ๋œปํ•œ๋‹ค (a๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ’ ์ด์ƒ์ธ ์ค„ ์•Œ์•˜๋‹ค)

  • ์กฐ๊ฑด๋งŒ์กฑ๊ณผ ์ง„์ž…์ง€์  flag๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์˜ ํƒˆ์ถœ์ง€์  ์„ค์ •์„ ๋ชปํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•

    ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(Great Common Divisor)๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ gcd(x,y)๋ผ ํ•  ๋•Œ,
    x % y = 0 ์ด๋ฉด gcd(x,y) = y
    y % x != 0 ์ด๋ฉด gcd(x,y) = gcd(x, x%y)๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค

๋‘ ๋ฐฐ์—ด์˜ ๋ฒ”์œ„ ๋‚ด a๋ฐฐ์—ด์˜ ๋ฐฐ์ˆ˜์™€ b๋ฐฐ์—ด์˜ ์•ฝ์ˆ˜๊ฐ€ ๋˜๋Š” ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜ ๊ตฌํ•˜๊ธฐ
๋ฐฐ์ˆ˜์™€ ์•ฝ์ˆ˜ ์–˜๊ธฐ์ธ์ค„ ๋ชจ๋ฅด๊ณ  ๋˜ %๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋ฅผ ๋ณด๋ฉฐ ๋‚˜๋ฝ์— ๋น ์ ธ๋ฒ„๋ฆฐ ์ƒ๊ฐ๋“ค..

int getTotalX(vector<int> a, vector<int> b) {
    int count = 0;
    
    // ๋ฒ”์œ„๋Š” a๋ฐฐ์—ด์˜ ์ตœ์†Œ์›์†Œ๊ฐ’ ์ด์ƒ b๋ฐฐ์—ด์˜ ์ตœ์†Œ์›์†Œ ์ดํ•˜
    for(int i = a[0] ; i<= b[0]; i++) {
        // ๋‘๋ฒˆ์งธ for๋ฌธ ์ง„์ž…์กฐ๊ฑด flag 
        bool isTrue = true;
        
        // b๋ฐฐ์—ด ์›์†Œ์˜ ์•ฝ์ˆ˜๊ฐ€ ๋˜๋Š” ์ˆ˜ ๊ตฌํ•˜๊ณ  ์กฐ๊ฑด๋ถ€ํ•ฉ ์‹œ ๋‹ค์Œ if๋ฌธ ์ง„์ž…๋ถˆ๊ฐ€
        for(int elm : b ){
            if(elm % i != 0){
               isTrue = false;
               break;
            }  
        }
        
        // b๋ฐฐ์—ด ์›์†Œ์˜ ์•ฝ์ˆ˜์กฐ๊ฑด ๋งŒ์กฑ๋œ ์ˆ˜๋งŒ ์ง„์ž…
        if(isTrue){
            // ์ตœ์ด ์นด์šดํŠธ ์กฐ๊ฑด flag
            bool isCount = true;
            
            // a๋ฐฐ์—ด์˜ ๋ฐฐ์ˆ˜ ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ํƒˆ์ถœ
            for(int elm : a){
                if(i % elm != 0){
                    isCount = false;
                    break;
                }
            }

            // ์ตœ์ข… ์นด์šดํŠธ ์ณŒ
            if(isCount)
                count++;
        }
    }
    
    return count;
}