알고리즘/코드워

[python]Total amount of points

(ㅇㅅㅎ) 2020. 4. 22. 21:36
728x90
반응형

https://www.codewars.com/kata/5bb904724c47249b10000131/train/python

 

Codewars: Train your coding skills

Codewars is where developers achieve code mastery through challenge. Train on kata in the dojo and reach your highest potential.

www.codewars.com

 

 Total amount of points

x:y 인 형태로 점수가 들어 있는 배열을 입력받아서 x가 y보다 클 경우는 포인트를 3점 더하고 x가 y와 같을 경우는 1을 더한 후 포인트를 되돌려주면 됩니다.

 

우선적으로 배열 안의 x:y만 출력되도록 만들어보면 아래의 코드와 같습니다.

games = ['1:0''2:0''3:0''4:0''2:1''3:1''4:1''3:2''4:2''4:3']
for i in games:
    print(i)
 
 

결과는 아래와 같습니다.

 

 

이 값들을 ':'을 기준으로 앞 뒤로 나눈 뒤 ':' 앞의 값을 x 변수에 뒤의 값을 y 변수에 저장하겠습니다.

그 뒤 x와 y를 출력해보겠습니다.

games = ['1:0''2:0''3:0''4:0''2:1''3:1''4:1''3:2''4:2''4:3']
for i in games:
    tmp = i.split(':')
    x = tmp[0]
    y = tmp[1]
    print(tmp, x, y)
 

결과는 아래와 같습니다.

 

 

이제 points 변수를 생성한 뒤 x가 y보다 클 경우는 3점 더하고 x가 y와 같을 경우는 1을 더해 보도록 하겠습니다.

games = ['1:0''2:0''3:0''4:0''2:1''3:1''4:1''3:2''4:2''4:3']
points = 0
for i in games:
    tmp = i.split(':')
    x = tmp[0]
    y = tmp[1]
    if x > y:
        points += 3
    elif x == y:
        points += 1
print(points)
 

결과 값으로 30이 출력됩니다.

 

전체 코드

def points(games):
    points = 0
    for i in games:
        print(i)
        tmp = i.split(":")
        if tmp[0> tmp[1]:
            points += 3
        elif tmp[0== tmp[1]:
            points += 1
    return points
 
if __name__=='__main__':
    answer = points(['1:0''2:0''3:0''4:0''2:1''3:1''4:1''3:2''4:2''4:3'])
    print(answer)
    answer = points(['1:1''2:2''3:3''4:4''2:2''3:3''4:4''3:3''4:4''4:4'])
    print(answer)
    answer = points(['0:1''0:2''0:3''0:4''1:2''1:3''1:4''2:3''2:4''3:4'])
    print(answer)
    answer = points(['1:0''2:0''3:0''4:0''2:1''1:3''1:4''2:3''2:4''3:4'])
    print(answer)
    answer = points(['1:0''2:0''3:0''4:4''2:2''3:3''1:4''2:3''2:4''3:4'])
    print(answer)
 

 

저는 귀찮아서 x와 y 변수를 생성하지 않고 if 구문을 작성했지만 처음 해보시는 분들이라면 해보시는 것을 추천합니다.

 

아래와 같이 한 줄로 줄이는 것도 가능하지만 초보자 분들께는 굳이 추천드리지는 않습니다.

참고로 아래와 같은 식이 가능한 이유는 x와 y는 0보다 크거나 같고 4보다 작거나 같기 때문에 가능합니다.

def points(a):
    return sum((x >= y) + 2 * (x > y) for x, y in (s.split(":"for s in a))
반응형

'알고리즘 > 코드워' 카테고리의 다른 글

[python]Sudoku Solution Validator  (0) 2020.04.24
[python]Get Planet Name By ID  (0) 2020.04.24
[python]Expressions Matter  (0) 2020.04.20
[python]Abbreviate a Two Word Name  (0) 2020.04.19
[python]Did I Finish my Sudoku?  (0) 2020.04.18