본문 바로가기
Algorithm/HackerRank

[HackerRank]Plus Minus(풀이 성공)

by 전봇대파괴자 2021. 1. 10.

문제

 

정수값들로 이루어진 리스트 arr와 그 길이 n가 주어진다.(단, -100≤arr[i]≤100, 0≤n≤100) 리스트 내 양수, 음수, 0의 구성비를 구하여 차례로 출력한다. 단, 소수 여섯번째 자리까지 출력한다.  

 

Sample Input :

6
-4 3 -9 0 4 1       

Sample Output :

0.500000
0.333333
0.166667

 

내 코드:

#!/bin/python3

import math
import os
import random
import re
import sys

def plusMinus(arr):
    plus=[] # 양수 들어갈 리스트
    minus=[] # 음수 들어갈 리스트
    zero=[] # 0 들어갈 리스트
    
    for num in arr:
        if num > 0: # 0보다 클 경우 양수 리스트에
            plus.append(num)
        elif num < 0: # 0보다 작을 경우 음수 리스트에
            minus.append(num)
        else: # 나머지는 0 리스트로
            zero.append(num)
    
    n1 = '%.6f' % (len(plus) / n) # 전체 양수 갯수/숫자 갯수를 소수 6번째 자리까지 표시
    n2 = '%.6f' % (len(minus) / n) # 전체 음수 갯수/숫자 갯수를 소수 6번째 자리까지 표시
    n3 = '%.6f' % (len(zero) / n) # 전체 0 갯수/숫자 갯수를 소수 6번째 자리까지 표시

    return n1, n2, n3

if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    answer = plusMinus(arr)
    print(answer[0]) # 튜플을 첫 번째부터 하나씩 출력
    print(answer[1])
    print(answer[2])
    

Comment: list와 if문을 활용하면 쉽게 풀 수 있는 문제입니다. 양수, 음수, 0에 해당하는 리스트의 값들을 if 문으로 나눠서 별개의 리스트를 생성한 후, 각 리스트들의 길이를 전체 리스트의 길이 n으로 나누면 답을 구할 수 있습니다.