티스토리 뷰

1. 문제 설명

(1) 곱하기 혹은 더하기

  • 각 자리가 숫자(0~9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하여 숫자 사이에 '*' 혹은 '+' 연산자를 넣는다.
  • 결과적으로 만들어 질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
  • 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정한다.
    연산 결과는 항상 20억 이하의 정수가 되도록 입력한다.

(2) 입력 조건

  • 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다.(1 <= S의 길이 <= 20)

(3) 출력 조건

  • 첫째 줄에 만들어질 수 있는 가장 큰 수를 출력한다.

2. 내가 생각한 풀이

# 숫자로 구성된 문자열 입력
s = input()

# 문자열의 각 원소를 숫자로 변경하여 리스트로 저장
nums = []
for i in s:
    nums.append(int(i))


# 숫자가 0 혹은 1이면 더하기를 나머지 숫자일 경우 곱하기를 진행
result = nums[0]
for j in range(1, len(nums)):
    # 조건문 설정에서 틀림
    if nums[j] == 0 or nums[j] == 1 or result == 0:
        result += nums[j]
    else:
        result *= nums[j]

print(result)
  • 우선적으로 result 변수에 문자열의 첫 번째 숫자(0번 인덱스)를 저장한다.
  • 그리고 그 다음 숫자가 0 혹은 1인 경우 result에 값을 더해주고
  • 그 외의 숫자인 경우 result에 값을 곱하면 쉽게 정답을 구할 수 있다.

3. 틀린 부분

result = nums[0]
for j in range(1, len(nums)):
    # if nums[j] == 0 or nums[j] == 1 or result == 0:
    #     result += nums[j]
    if nums[j] <= 1 or result <= 1:
        result += nums[j]
    else:
        result *= nums[j]
  • 반복문 내에서 조건 설정이 조금 잘 못 되었다.
  • 문제에서 요구하는 최댓값을 얻기 위해서는 result의 값이 1인 경우에도 더하기를 진행해야 한다.
  • 나는 result가 0인 경우에만 더하기를 진행했기 때문에 오답이 된다.

4. 후기

  이 문제는 접근 방법은 얼추 맞았으나 코드 구현에 있어서 사례들을 꼼꼼하게 살피지 않아서 오답이 발생한 사례가 되었다. 이전 문제에서는 문제를 꼼꼼하게 읽지 않아서 오답이 되었다면 이번 문제에서는 사례를 꼼꼼하게 살피지 않아서 오답이 되었다. 옛날 학창시절에 나는 공부의 양에 신경을 썼는데 요즘에는 양은 적더라도 공부의 질을 높이는데 중점을 둬야 겠다는 너무 당연한 사실을 깨닫게 되었다. 이미 공부했던 문제들을 복습하면서 코딩의 질을 높이는 방법을 강구하려고 한다. 급하게 생각하지 말고 천천히 가자.


github : Algorithms/q2_0.py at main · LeeSeok-Jun/Algorithms (github.com)

 

LeeSeok-Jun/Algorithms

Practice algorithms 2020. Contribute to LeeSeok-Jun/Algorithms development by creating an account on GitHub.

github.com