[프로그래머스]치킨 쿠폰

allnight5·2022년 12월 15일
0

프로그래머스 입문

목록 보기
50/53

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.

파이썬 첫번째 실패

def solution(chicken):
    answer = 0
    coupon = 0
    while chicken != 0 :
        chicken //= 10
        answer += chicken
        coupon += chicken%10
        print(chicken, ":", coupon)
        if coupon > 9:
            chicken += coupon
            coupon =0 
    
    return answer

치킨을 10으로 나누고 그걸 더해주고 10보다 작은 수의 치킨변수에 쿠폰이란 변수에 넣어주고 그게 10개 이상이면 치킨변수에 더해주고 쿠폰은 0으로 다시바꿔서 해봤는데
안된다. 왜 안될까 고민 했더니 쿠폰변수의 수를 치킨변수에 더해주는것이 안된다.
그 다음에 쿠폰변수를 치킨변수로 초기화 시키고

파이썬 두번째 실패

def solution(chicken):
    answer = 0
    coupon = chicken
    while chicken != 0 :
        chicken = coupon//10
        answer += chicken
        coupon += chicken%10
        print(chicken, ":", coupon) 
    
    return answer

이게 끝이 안난다. 10보다 작아서 1이 안나와서 끝나야 할것인데?
보니까.. 쿠폰은 계속 더해지고 그 값을 치킨이 가져가서 계속 쓰니까 0이 안나온다.
그러면 쿠폰값을 더하는것이아닌 한번 돌때마다 초기화(다른 값 넣어서 바꿔주기) 해줘야한다. 그런데 그냥 돌면 남아있는 쿠폰값이 사라지지 않겠는가..한번 돌려봤는데 사라져서 원하는 값이 안나왔다.
그렇다면 치킨이 아닌 쿠폰을 넣고 치킨을 더하자

파이썬 세번째 성공

def solution(chicken):
    answer = 0
    coupon = chicken
    while chicken != 0 :
        chicken = coupon//10
        answer += chicken
        coupon = coupon%10 + chicken 
    
    return answer

이렇게 완성되었다.

내가 생각했던 코드

다른분꺼가 내가 하고싶었던 형식이였던것 같은데..
좀 더 고민해보자

def solution(chicken):
    coupon = 0 
    while chicken > 9:
        coupon += chicken // 10
        chicken = chicken // 10 + chicken % 10
    return coupon

놀라운 코드

def solution(chicken):
    return int(chicken*0.11111111111)

10%의 10%의 10%의 10% ..라서
int형으로 되어있기 때문에 소수점은 버리고 곱이 저장된다
이것이 하나씩 풀면
chicken0.1 + chicken0.01+ chicken+0.001 --- 이런식으로
10%의 10% 10%를 더해가는 식으로 int로 정수의 값만 출력해서 꺼내준다.
이런 관점도 있다는 것을 알았다.


profile
공부기록하기

0개의 댓글