럭키 스트레이트

Lee·2023년 3월 21일
0

알고리즘

목록 보기
21/24

문제

어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다.

특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 점수 N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다.

현재 점수 N이 주어졌을 때, 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지를 알려주는 프로그램을 작성하시오. 럭키 스트레이트를 사용할 수 있다면 "LUCKY"를, 사용할 수 없다면 "READY"라는 단어를 출력한다. 또한 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. 예를 들어 자릿수가 5인 12,345와 같은 수는 입력으로 들어오지 않는다.

입력 예시
123402
출력 예시
LUCKY

나의 풀이

  1. 정수의 각 자릿수를 계산하기 위해서는 로직이 추가로 들어가야 하기 때문에 간단히 계산하기 위해 string으로 변환하여 각 자릿수를 더하여 값을 비교하는 방식을 사용했다.
  2. 문자열 길이 length를 구한 뒤 for문을 2번 사용해 첫번째는 0~length/2까지의 합, 두번째는 length/2~마지막 까지의 합을 구한뒤 2개의 값이 같으면 LUCKY, 다르다면 READY를 출력하도록 했다.
n = int(input())

nums = str(n)
length = len(nums)

left = 0
for i in range(0, length//2):
    left += int(nums[i])

right = 0
for i in range(length//2, length):
    right += int(nums[i])

if left == right:
    print('LUCKY')
else:
    print('READY')
  1. 완성 이후 리팩터링 과정에서 위 코드에서 사용한 left, right 두개의 변수를 사용할 필요없이 total이라는 변수 하나를 사용해 첫번째 합 - 두번째 합을 하여 0이 된다면 LUCKY, 아니라면 READY를 출력하는 방식이 효율적이라 생각해서 코드를 수정했다.
total = 0

for i in range(0, length//2):
    total += int(nums[i])

for i in range(length//2, length):
    total -= int(nums[i])

코드

n = int(input())

nums = str(n)
length = len(nums)

total = 0

for i in range(0, length//2):
    total += int(nums[i])

for i in range(length//2, length):
    total -= int(nums[i])

if total == 0:
    print('LUCKY')
else:
    print('READY')
profile
발전하고 싶은 백엔드 개발자

0개의 댓글