HackerRank Algorithm - 3


Tags : WarmUp


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

์š”์•ฝ

Prepare/Algorithm/WarmUp

๋ฌธ์ œํ’€์ด ํ‰๊ท ์†Œ์š”์‹œ๊ฐ„ ๋‚œ์ด๋„ ์ฒด๊ฐ๋‚œ์ด๋„ ํ•ด๊ฒฐ๋ชปํ•œ๋ฌธ์ œ
7๊ฐœ ์•ฝ20๋ถ„ easy ์ง€๋ฌธ์ด ๊ธธ์–ด์ง€๊ณ  ์‹ค์ˆ˜๊ฐ€๋งŽ์•„์ง 3๊ฐœ

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

์ˆœ๋ฒˆ ๋ฌธ์ œ ์‹œ๊ฐ„ ํ’€์ด๋ฐฉ์‹ ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค ๋น„๊ณ 
1 Subarray Division 19๋ถ„ 2์ค‘for๋ฌธ ย  ย 
2 Divisible Sum Pairs 8๋ถ„ 2์ค‘for๋ฌธ๊ณผ &&์กฐ๊ฑด ย  ์กฐ๊ฑด์„ ์ž˜ ์ฝ์ž
3 Migratory Birds 30๋ถ„์ดˆ๊ณผ sort() id๋‹น ๊ฐฏ์ˆ˜ ๋ฒกํ„ฐ ์˜ˆ์™ธ์ƒํ™ฉ ์ฃผ์˜ํ•˜๊ธฐ
4 Day of Programmer 30๋ถ„์ดˆ๊ณผ if ์ž”๋œฉ! ๋™์ผ ์‰ฝ์ง€๋งŒ ๊ธด๋ฌธ์ œ
5 Bill Division 12๋ถ„ ๋ˆ„์ ๋ง์…ˆ๊ณผ if ๋™์ผ ย 
6 Sales by Match ๊ฒ€์ƒ‰ ย  ํ•ด์‰ฌ๋งต,๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋ฐฐ์› ๋‹ค!
7 Drawing Book 9๋ถ„ ์ง์ˆ˜๊ณ„์‚ฐ minํ•จ์ˆ˜ ๋งˆ์ง€๋ง‰ํŽ˜์ด์ง€ ์ฃผ์˜!

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

Migratory Birds

  • ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์‹ ๊ฒฝ์“ฐ๊ธฐ

sort()๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋น„๊ต์  ๋น ๋ฅด๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ๋งŒ๋“  ์ˆ˜์‹์—์„œ ์˜ˆ์™ธ ์ ์šฉํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•ด ํ‹€๋ฆฐ ๋ฌธ์ œ
์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ํฌ๊ณ  ๋งŽ์€ ์ˆซ์ž๋“ค๋กœ ํ…Œ์ŠคํŠธํ•ด๋„ ์ •์ƒ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค์‹œ๊ธˆ ๊นจ๋‹ฌ์•˜๋‹ค

int migratoryBirds(vector<int> arr) {
    // sort๋กœ id์ˆœ ์ •๋ ฌ
    sort(arr.begin(),arr.end());

    int check = 1;  // id๋‹น ๊ฐฏ์ˆ˜ ์นด์šดํŠธ
    int comp = 1;   // ์ด์ „ ์ตœ๋Œ€์ˆ˜์™€ ๋น„๊ต
    int id = 0;     // ์ตœ๋Œ€์ˆ˜๋ฅผ ๊ฐ€์ง„ id > ๋ฐ˜ํ™˜
    
    for(int i =1; i<arr.size(); i++)
    {
        // ์›์†Œ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ํ•ด๋‹น id์˜ ์นด์šดํŠธ๊ฐ€ ๋๋‚ฌ๋‹ค๋Š” ๋œป์ด๊ณ ,
        // ์ง์ „ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜์™€ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
        // ๋‹จ, ๋งˆ์ง€๋ง‰ id์ธ 5๋Š” ๋งˆ์ง€๋ง‰ ์›์†Œ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๋น„๊ต
        if(arr[i] != arr[i-1] || i == arr.size()-1)
        {
            if(check > comp)
            {
                id = arr[i-1];
                comp = check;
            }
            check = 1;
        }
        check++;
    }
    return id;
}

Day of the Programmer

  • ๋‚ ์งœ๊ณ„์‚ฐ์€ ์–ด๋ ต๊ฒŒ ์ˆ˜์‹์“ฐ์ง€๋ง๊ณ  ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•  ๋ฐฉ๋ฒ•์„ ๋จผ์ € ์ฐพ์ž
string dayOfProgrammer(int year) {
    bool leap = false;
    bool julian = false;
    
    if(year < 1918)
        julian = true;
    if(julian && year % 4 == 0)
        leap = true;
    if(!julian && year % 400 == 0)
        leap = true;
    if(!julian && year % 4 == 0 && year % 100 != 0)
        leap = true;
        
    if(year == 1918){
        return "26.09.1918";
    }
    if(leap){
            return "12.09."+to_string(year);
    }
    else{
            return "13.09."+to_string(year);
    }
}

Sales by Match

  • ํ•ด์‰ฌ๋งต ํ™œ์šฉํ•˜๊ธฐ ์ข‹์€ ์˜ˆ์‹œ!
  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ™œ์šฉ ์‚ฌ๋ก€๋„ ํ•จ๊ป˜ ๋ณด๊ธฐ

๋‹จ์ˆœํžˆ ํ•˜๋‚˜ํ•˜๋‚˜ ์ง€์›Œ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์„ ์“ฐ๋Š”๊ฑด ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.
์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ์–ด๋–ค stl์„ ์‚ฌ์šฉํ•˜๋‚˜ ์•Œ๊ณ ์‹ถ์–ด ๋‹ต๋ถ€ํ„ฐ ๊ฒ€์ƒ‰ํ•ด๋ดค๋‹ค.

// ๋งต ํ™œ์šฉ
int sockMerchant(int n, vector<int> ar) {
    map<int,int> map;
    for(size_t i = 0; i<n; i++){
        if(map.find(ar[i]) != map.end())
        {
            map[ar[i]]++;
        }
        else{
            map.insert(make_pair(ar[i],1));
        }
    }
    
    int answer = 0;
    for(auto iter: map){
        answer += iter.second / 2;  // ์†Œ์ˆซ์ ์„ ๋ฒ„๋ฆฐ ๊ฐ’๋งŒ ๊ณ„์‚ฐ๋œ๋‹ค
        cout << iter.second << '\n';
    }

    return answer;
}
// ๋ฉ”๋ชจ์ด์ œ์ด์…˜
int sockMerchant(int n, vector<int> ar) {
    int temp[101] = {}; // ์–‘๋ง์ƒ‰ 101๊ฐ€์ง€
    
    for(size_t i = 0; i< ar.size(); i++){
        temp[ar[i]]++;
    }
    
    int answer = 0;
    for(auto iter : temp){
        answer += iter /2;
    }
    return answer;
}