greenhelix
greenhelix
greenhelix
07-09 12:50
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#46_Code Signal Arcade >> Elections Winners
Algorithm/Java

#46_Code Signal Arcade >> Elections Winners

2020. 5. 18. 00:00

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \


Elections Winners 
선거의 승리자들

 

문제를 보겠습니다.

주어진 배열의 숫자들은 각 후보들의 현재 투표수를 의미합니다.
여기서 integer k는 남아 있는 투표의 수를 뜻합니다.
여기서 몇 명의 후보가 아직 이 남은 투표수에 따라 승리 할 수 있는지 그 경우의 해당하는 후보의 숫자를 구하라는 문제입니다.

답안 코드를 보겠습니다.

int electionsWinners(int[] votes, int k) {
    int result = votes.length; 
    int [] elect = new int[votes.length];
    if(k == 0){
        System.out.println("no more voters..");
        Arrays.sort(votes); 
        if(votes[votes.length-1] == votes[votes.length-2]){return 0;}
        else{return 1;}       
    }else if(k != 0) {
        for(int i = 0; i<votes.length; i++){ elect[i] = votes[i]+k;} 
        for(int i = 0; i<votes.length; i++){
                for(int j = 0; j<votes.length; j++){
                    if(elect[i] <= votes[j]){result--; break;}
                }    
        }       
    }
    System.out.println("final result is..."+result+" people can be a Winner !!");  
    return result;
}
  1. 먼저 새로운 배열을 하나 선언해줍니다.

    int [] elect = new int[votes.length];
  2. 이제 k의 값이 0 이 아니라면, elect배열에 각자 최대 얻을 수 있는 표의 수를 담아줍니다.

  3. elect에는 각자 가능한 최대 득표수가 담겨있는 배열이 되었고, 그것을 기존의 현재 득표수배열 votes와 비교를 해줍니다.

  4. 이 두개의 반복문을 진행하면서 조건문을 걸어줍니다.

    if(elect[i] <= votes[j]){result--; break;}

    그 후보의 최대 득표수가 기존의 어떠한 후보의 투표수보다 작거나 같다면 그 후보는 절대 당선이 안되니깐, result에서 -1을 해주면 되는 것이죠.

그렇게 문제 풀이가 완료 됩니다.
이해가 안되신다면 댓글 달아주세요.


*이제 엘리트 분들의 답안을 감상하자... *

JAVA

int electionsWinners(int[] votes, int k)
{
    int max = Arrays.stream(votes).max().getAsInt();
    return k == 0 ? Arrays.stream(votes).filter(x -> x == max).count() == 1 ? 1 : 0 : (int) Arrays.stream(votes).filter(x -> x + k > max).count();
}

stream 역시 편리하지만, 쓰는사람만 편한거 같네요. 모르는 사람은 뭔말인지도 모를 가능성이 높아지는...

 

Python3

def electionsWinners(v, k):
    m = max(v)
    
    return int(v.count(m) == 1) if k == 0 else len([n for n in v if m < n + k])

역시 파이썬... 단순하고 직관적이네요.. 역시 ..

JS

function electionsWinners(votes, k) {
  var max=Math.max(...votes)
  var r=votes.filter(x=>x+k>max||x===max).length
  return k?r:r==1?1:0
}

공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!

부탁드려요 돈드는거 아니잖아요~

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#47_Code Signal Arcade >> Is MAC 48 Address?  (0) 2020.06.09
#45_Code Signal Arcade >> Build Palindrome  (0) 2020.04.08
#44_Code Signal Arcade >> Find Email Domain  (0) 2020.03.19
    'Algorithm/Java' 카테고리의 다른 글
    • #48_Code Signal Arcade >> is Digit
    • #47_Code Signal Arcade >> Is MAC 48 Address?
    • #45_Code Signal Arcade >> Build Palindrome
    • #44_Code Signal Arcade >> Find Email Domain
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바