본문 바로가기

📝 알고리즘/Programmers

[PGS] Lv.0 (코딩테스트 입문) 9일차 문제

개미 군단

int solution(int hp) {
    int jang = hp / 5;
    hp -= 5 * jang;
    int byung = hp / 3;
    hp -= 3 * byung;
    int answer = hp + jang + byung;
    return answer;
}

모스부호 (1)

char MORSE_CODE[26][5] = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

string solution(string letter) {
    string word = "";
    string answer = "";
    for(int i=0; i<letter.length(); ++i){
        if(letter[i]==' ') {
            for(int j=0; j<26; ++j) {
                if(MORSE_CODE[j]==word) answer += (j+'a');
            }
            word = "";
        }
        else {
            word += letter[i];
        }
    }
    for(int j=0; j<26; ++j) {
        if(MORSE_CODE[j]==word) answer += (j+'a');
    }
    return answer;
}

가위바위보

string solution(string rsp) {
    string answer = "";
    for(int i=0; i<rsp.length(); ++i){
        if(rsp[i]=='2') answer += '0';
        else if(rsp[i]=='0') answer += '5';
        else answer += '2';
    }
    return answer;
}

구슬을 나누는 경우의 수

int solution(int balls, int share) {
    long long answer = 1;
    int nm = balls - share;
    for(int i=0; i<nm; ++i){
        answer *= balls-i;
    }
    for(int i=0; i<nm; ++i){
        answer /= nm-i;
    }
    return answer;
}
  • 위 코드로 테스트35만 실패한다,,, 아직 원인 못찾음

→ 해결

long long solution(int balls, int share) {
    double answer = 1;
    int nm = balls - share;
    for(int i=nm+1; i<=balls; ++i){
        answer *= i;
    }
    cout << answer;
    for(int i=2; i<=share; ++i){
        answer /= i;
    }
    return answer;
}
  • $n!/(n-m)!*m!$ 여기서 순서만 바꾸었는데 성공…뭐가 문제였을까
  • 아무래도 범위 문제였을 가능성?

 

 

✍🏻 알파벳 쉽게 넣기 → (숫자)+'a' : 그 순서의 알파벳을 가리킴 ex) 1+’a’ ⇒ ‘b’ / 0+’a’ ⇒ ‘a’