본문 바로가기
Django

12일차 파이썬 알고리즘 문제 풀기 and 과제

by 승현0604 2022. 9. 16.

오늘은 파이썬 문제를 풀어보았다. 어려웠던 문제들을 다시풀어보고 다시풀어보는데...정말 모르겠다... 잘하고 있는건지

 

오늘은 어제에 이어서 알고리즘 문제를 푸는데 하루종일 걸린 것 같은데 알고리즘 문제중 어려웠거나 인상 깊었던 문제들을 복습을 해보겠다.

 

첫번째 문제는 손익 분기점에 관련된 문제이다. 고정비용과 가변비용을 합친 값이 노트북 가격의 책정된 가격보다 많이 나올때 순수익이 발생을 하는데 몇대가 팔리는순간 순수익이 발생하는지를 묻는 질문이였다.

 

단순한 수학문젠데...  이걸 코딩으로 하나한 뜯어보니 생각보다 어렵더라 그래도 코딩으로 푸니까 금방나오기는 했따

 

푸는 방법은 간단했다. map함수를 이용해서 3개의 변수를 나란히 받아주고 고정비용에다가 책정비용 - 재료값을 뺏을 때 나오는 값을 나눠주고 하나를 더해주면 된다. 

 

이 문제의 핵심은 조건문을 이용해야하고 수학적인 사고가 필요했던 문제였다. 

A, B, C = map(int, input().split())

if B < C:
    print(A // (C - B) + 1)
else:
    print("-1")    

 

다음과 같이 답이 나오게 된다. 대충 보면 쉬워보이지만 저렇게 만들기까지 머리를 많이 써야되더라... 다음 문제도 보겠다. 

캬아..벌써부터 어렵다 말그대로 한 테두리가 하나의 방이라고 치자. 1이면 방이 1개인거고 2~6까지 하나의 방으로 생각을 한다는 의미이다,

 

이 문제에서 원하는것은 숫자를 집어 넣었을 때 중첩시켜서 방을 몇개를 거쳐가냐를 답해주는 프로그램을 짜는게 문제였다. 

일단 이문제에 대한 핵심은 방이 합쳐지는 규칙이 1씩 더해지는식을 이용해야 한다는게 핵심이였던 것 같다

규칙을 살펴보자면 방을 n이라고 했을 때 1+ 6*(1 + 2 + 3 ........+n) = 방에 존재하는 마지막 숫자

규칙을 보면 1부터 n까지가 더해야 한다는 규칙이 있다. 그래서 1부터 n까지 더하는공식을 사용해서 풀었다

 

그리고 조건문을 만들어줘서 다음 문제도 깔끔하게 해결을 하였다.  

N = int(input())

bee_num = 1 #방의 갯수
bee_last = 1 + (3*(bee_num)*(bee_num-1))

while True:

    if N > bee_last:
        bee_num +=1
        bee_last =  1 + (3*(bee_num)*(bee_num-1))

    elif N == bee_last:
        print(bee_num)
        break

    elif N < bee_last:
        print(bee_num)
        break

오늘 풀었던 문제8문제 중에 2문제를 핵심적으로 가져왔는데 이유는 가장 많은 시간을 투자해서 그런것 같다. 그리고 오랜만에 수학문제를 푸는것 같아서 재미있기고 했다

 

아쉬운점. 아직도 문제푸는 속도가 많이 느리다. 기본이 아직 많이부족한건지.... 아니면 내가 못한느건지 오늘 조금 문제를 풀면서 나 자신한테 실망했던 시간이 많았고 재밌다고 생각했던 코딩이 조금은 오늘 많이 지루했던건 사실이였다. 역시 잘하면 재미있는것 같다

 

배운점.  그래도 문제를 해결을 했을 때의 쾌감을 위해서 이런고생을 하는걸까 문제를 푸는 사고방식이 많이 달라졌다. 뭔가 문제 맞춤형으로 코딩실력이 늘어가는건 아닐까라는 고민이 들기는 하지만 신중하고 꼼꼼하게 보는 습관이 생겼다. 코딩을 하면서 많이 필요한 기술이다. 그 글자나 숫자에 대한 타입이나 형태를 고려하면서 신중하게 변경을 해나가는 꼼꼼한 모습을 보고 많이 늘었구나 라고 느낀다.