<이코테> 그리디 곱하기 혹은 더하기 - 파이썬

우주·2023년 6월 29일
0

코딩테스트

목록 보기
1/3
post-thumbnail

0~9 까지의 숫자

x, + 를 넣어서 가장 큰 수를 만듬
사칙연산이 아니라 왼쪽 값에서부터 값을 계산함

  1. 만약에 0이 있다면 더하기를 해야함
  2. 나머지는 계속 곱하기를 하는게 가장 크게 나옴

타입을 정수형으로 바꿈

  1. 첫 번째 자리와 두 번째 자리에 0이 있는지 확인한다
  2. 있으면 더하고 sum 변수에 넣는다.
  3. 0이 없으면 곱하고 sum에 넣는다.
  4. sum 변수와 그 다음 자릿수를 확인한다
  5. sum이 0이면 두 번째 자리 볼 필요 없이 더한다
  6. 다음 자릿수가 0이면 더한다.
  7. 둘다 0이 아니라면 sum *= 다음 자리를 한다.

✍️ 첫 번째 Try

data = input()

list_number = [int(i) for i in data] 
sum = 0

for i in range(0,len(list_number)-1):
    #i 가 0일때
    if (i == 0):
        if (list_number[i] == 0 or list_number[i+1] == 0):
            sum = list_number[i] + list_number[i+1]
            print(f"{i} 번째 계산값 {sum} ")
            continue
        elif (list_number[i] != 0 and list_number[i+1] != 0):
            sum = list_number[i] * list_number[i+1]
            print(f"{i} 번째 계산값 {sum} ")
    
    else :
        if (sum == 0 or list_number[i+1] == 0):
            print(sum, list_number[i+1])
            sum += list_number[i+1]
            print(f"{i} 번째 계산값 {sum} ")
            continue
        elif (sum != 0 and list_number[i+1] != 0):
            print(sum, list_number[i+1])
            sum *= list_number[i+1]
            print(f"{i} 번째 계산값 {sum} ")

print(sum)

💻 Best solve

data = input()

# 첫 번째 문자를 숫자로 변경하여 대입

for i in range(1, len(data)):
    num = int(data[i])
    if num <= 1 or result <= 1:
        result += num
    else: 
        result *= num

print(result)

🤔 나와의 차이점은 무엇인가?

내가 쓴 풀이에서 코드의 길이가 절반이나 차이가 났다.

이에 대한 이유를 생각해보자.

첫 째, i가 0인 경우를 반복문마다 계속 처리해야만했다.
둘 째, 더하기를 사용 할 때를 0일 때만을 고려해서 사용했다.

이 두 가지 점으로 미루어 보았을 때,

조건식을 굉장히 까다롭게 만들수 밖에 없었다는 것이다.

KPT 회고

K

  • 코테 문제를 거의 1년 만에 잡아보는데 블로그 기록까지 남겼다.
  • 머리가 녹슨 게 느껴지지만 강의를 보면서 어느정도 감을 잡았다.
  • 파이썬 문법에 대해서 거부감이 있었는데 공부를 하면서 하루만에 다시 잡게 됐다.

P

  • 예외처리에 있어서 좀 더 효율적으로 생각하지 못했다.

T

  • 그리디 문제를 하나 더 풀어봐야겠다는 생각이 들었다.
  • 내일도 오늘 이상의 공부시간을 확보해서 코테문제를 정리해야겠다는 생각이 듦
profile
개발합니다. 회고합니다.

0개의 댓글