λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/Programmers

[C++/PGS] Lv.1 : 체윑볡 (GREEDY)

728x90

νƒμš•λ²• (Greedy) : μ²΄μœ‘볡

문제 좜처 - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ μ½”λ”©ν…ŒμŠ€νŠΈ 고득점 Kit

 

문제 μ„€λͺ…

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

 

μ œν•œμ‚¬ν•­
  • 전체 ν•™μƒμ˜ μˆ˜λŠ” 2λͺ… 이상 30λͺ… μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ 체윑볡이 μžˆλŠ” ν•™μƒλ§Œ λ‹€λ₯Έ ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 이 학생은 μ²΄μœ‘λ³΅μ„ ν•˜λ‚˜λ§Œ λ„λ‚œλ‹Ήν–ˆλ‹€κ³  κ°€μ •ν•˜λ©°, 남은 체윑볡이 ν•˜λ‚˜μ΄κΈ°μ— λ‹€λ₯Έ ν•™μƒμ—κ²ŒλŠ” μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†μŠ΅λ‹ˆλ‹€.

 


 

ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€κ°€ μ—„μ²­λ‚˜κ²Œ λ§Žμ€ λ¬Έμ œμ΄λ‹€...

μ²˜μŒμ— λŒ€μΆ© ν’€μ—ˆλ‹€κ°€ 틀리고 문제λ₯Ό λ‹€μ‹œ μ½μ–΄λ³΄λ‹ˆ λ†“μΉœ 뢀뢄이 μžˆμ—ˆλ‹€

μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€!

 

κ·Έλž˜μ„œ μ—¬λ²Œμ΄ μžˆμ§€λ§Œ λ„λ‚œλ‹Ήν•΄μ„œ κ·Έ μ—¬λ²Œμ„ 본인이 μž…μ–΄μ•Όν•˜λŠ”.. 그런 학생을 μš°μ„ μ μœΌλ‘œ μ²˜λ¦¬ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

 

그리고 λͺ‡λͺ‡ ν…ŒμΌ€μ—μ„œ

signal: aborted (core dumped)) κ°€ 뜨길래 λ©”λͺ¨λ¦¬λ₯Ό μ’€ μ•„κ»΄μ•Όν•˜λ‚˜ μ‹Άμ–΄μ„œ

 

lost, reserve 벑터 μ •λ ¬ ν›„ forλ¬Έμ—μ„œ lost 학생을 μ²˜λ¦¬ν•˜λ©΄ reserve 탐색을 λ©ˆμΆ”λ„λ‘ breakλ₯Ό λ„£μ–΄μ£Όμ—ˆλ‹€.

 

κ·Έλ ‡κ²Œ ν–ˆλ”λ‹ˆ 톡과! 😎

레벨1 μΉ˜κ³ λŠ” κΉŒλ‹€λ‘œμš΄ λ¬Έμ œμ˜€λ‹€κ³  생각함

 

 

 

λ‚˜μ˜ 풀이

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    n -= lost.size();
    sort(lost.begin(), lost.end());
    sort(reserve.begin(), reserve.end());
    
    for(int i=0; i<lost.size(); ++i){
        for(int j=0; j<reserve.size(); ++j){
            if(lost[i] == reserve[j]){
                lost.erase(lost.begin()+i);
                i--;
                reserve.erase(reserve.begin()+j);
                j--;
                n++;
            }
        }
    }
    for(int i=0; i<lost.size(); ++i){
        for(int j=0; j<reserve.size(); ++j){
            if(lost[i]+1 == reserve[j]){
                lost.erase(lost.begin()+i);
                i--;
                reserve.erase(reserve.begin()+j);
                n++;
                break;
            }
            else if(lost[i]-1 == reserve[j]){
                lost.erase(lost.begin()+i);
                i--;
                reserve.erase(reserve.begin()+j);
                n++;
                break;
            }
        }
    }
    answer = n;
    return answer;
}

 

728x90