본문 바로가기

알고리즘 삽질장

[이코테] 구현 - 럭키 스트레이트

반응형

해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 

 


이 문제는 쉽게 풀렸지만 필자가 풀이한 방법 2가지, 책에서 제공하는 풀이 1가지 총 3가지 풀이 방법에 대해 소개하려고 한다. 각 풀이에 사용된 문법들이 다른 어려운 문제에도 분명히 쓰일 수도 있을 것 같아 기록하려고 한다.

문제설명

게임의 아웃복서 캐릭터는 필살기인 '럭키 스트레이트' 기술이 있다. 이 기술은 매우 강력한 대신에 게임 내에서 정수가 특정 조건을 만족할 경우에만 사용이 가능하다. 특정 조건이란, 현재 캐릭터의 점수를 N이라고 할 때, 자릿수를 기준으로 정수 N을 반으로 나누어 왼쪽 부분의 각 자릿수 합과 오른쪽 부분의 자릿수 합을 더한 값이 동일할 때에만 사용이 가능하다. 예를 들어, N = 123,402 라고 한다면 왼쪽은 123, 오른쪽은 402이고 각 자릿수를 합하면 모두 6이 된다. 이 때는 럭키 스트레이트 기술을 사용할 수 있다.

점수 N이 주어질 때, 럭키 스트레이트 기술을 사용할 수 있는지 없는지 출력해라.

입력조건

  • 첫째줄에 점수 N이 정수로 주어진다.(10 <= N <= 99,999,999(9천만) ). 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.

출력조건

  • 첫째 줄에 럭키 스트레이트를 사용할 수 있다면 "LUCKY"를, 사용할 수 없다면 "READY"를 출력한다.

사고과정

  • 입력이 정수로 들어온다고 했지만 '자릿수'를 활용하므로 정수를 문자열 형태로 바꾸어야 한다고 생각했다.
  • 그리고 문자열 형태로 들어오면 문자열의 길이를 length 함수로 측정이 가능하니 해당 함수를 활용
  • 그리고 절반으로 쪼개기 위해서는 문자열 길이를 2로 나눈 몫(length(문자열) // 2) 값을 활용
  • 3가지 방법으로 풀이해보았는데, list comprephension, map, 일반 loop 를 사용해보았음

풀이

1. list comprehension 사용

import sys

N = input()
mid = len(N)//2
left = [int(x) for x in N[0:mid]]
right = [int(x) for x in N[mid:]]

if sum(left) == sum(right):
    print('LUCKY')
else:
    print('READY')

2. map 이라는 Python built-in 함수 활용

list에 map 함수를 활용해 이터레이터로 만들고 다시 list로 감쌈. 이렇게 해본 이유는 최근에 수호님의 블로그에서 map 함수 관련해 배웠던 내용을 적용해보았다. 해당 문제에서는 자릿수를 합하기 위해 원소를 int 형으로 다시 바꾸어야 해서 코드가 좀 길어지긴 함

import sys

N = input()
mid = len(N)//2
array = []
array.append([int(x) for x in N[0:mid]])
array.append([int(x) for x in N[mid:]])

res = [*map(sum, array)]

if res[0] == res[1]:
    print('LUCKY')
else:
    print('READY')

3. 책 풀이 - 일반 loop 사용

summary 변수를 활용해 왼쪽 합은 summary에서 더하고 오른쪽 합은 summary에서 빼서 summary가 0이되면 각 자릿수 합이 동일하다고 판단하는 아이디어가 인상적

import sys

N = input()
length = len(N)
summary = 0

for i in range(length//2):
    summary += int(N[i])
for i in range(length//2, length):
    summary -= int(N[i])

# summray 가 0이라는 것은 왼쪽, 오른쪽 각 자릿수합이 동일하다는 의미!
if summary == 0:
    print('LUCKY')
else:
    print('READY')
반응형