TIL#12 22.11.29.금

Han Lee·2022년 11월 29일
0

TIL

목록 보기
5/43

알고리즘과 자료구조는 왜 배워야 할까?
-> 코드 최적화를 위해서

https://blog.yena.io/studynote/2018/11/14/Algorithm-Basic.html

자료구조에 대해 더 공부해야 할것 같다. 알고리즘 문제를 보았을때 바로 코드를 작성하는게 아니라
문제의 해결과정과 필요한것을 글로 적어가며 정리후 코드를 작성하려고하는데 강의를 들으면서도 가졌던 어려움은 자료구조를 왜 다르게 쓰는지 이해를 하지 못하는 점이 문제 인것 같다.

타임어택 알고리즘

문제 1 각도기

def solution(angle):
    if angle< 90 and angle >0:
        answer = 1
    elif angle == 90:
        answer = 2
    elif 90< angle and angle<180:
        answer =3
    elif angle == 180:
        answer=4
    return answer

풀면서 문제는 없었다.

문제2 옷가게

def solution(price):
    answer = 0
    if price >= 100000 and price < 300000:
        answer = int(price - (price*0.05))
    elif price >= 300000 and price <500000:
        answer = int(price - (price*0.1))
    elif price >= 500000:
        answer = int(price - (price*0.2))
    else:
        answer = int(price)
    return answer

처음 풀었을때는 13,14에서 오류나서 문제를 다시 읽어보니 정수로 표현하라 적혀있어서 int를 아용하니 문제가 해결됬다.

def solution(price):
    discount_rates = {500000: 0.8, 300000: 0.9, 100000: 0.95, 0: 1}
    for discount_price, discount_rate in discount_rates.items():
        if price >= discount_price:
            return int(price * discount_rate)

다른 답안에서 가져왔다. 모르겠다.

문제3 369 입력받은 숫자에 3,6,9가 포함이 되었을 때 총 몇개 포함됬는지 알아보기

풀이과정
1. 받은 숫자를 각자리수로 나누어 list형으로 만듦
2. for문을 통해서 List길이 만큼 돌리면서 3,6,9와 일치하면 카운트 1 올리기
해결과정
1-a 받은 숫자를 리스트로 바꾸는 법을 몰라서 구글링해본결과 map이라는 함수를 이용한다고 한다.
list(map(int,str(order))) : order를 문자열로 바꾼다. list함수는 인자로 iterable(반복할 수 있는)한 것이 와야 한다고 한다. 하지만 정수는 들어갈 수 없다. ex) a='123' a[0] =1 가능 a=123 이대로 끝
map은 map(int,str(order)) str한 oreder을 하나하나 int함수에 넣어라
list()는 리스트로 만들어주는 함수이다.
-> order를 문자로 바꾸고 하나하나 정수로 다시 바꿔서 리스트로 만들어라

def solution(order):
    answer = 0
    new_list = list(map(int,str(order)))
    for i in range(len(new_list)):
        if new_list[i] == 3 or new_list[i] == 6 or new_list[i] == 9:
            answer +=1
    return answer

계선 할 점 3,6,9는 전부 3으로 나누었을 때 0이 되는 값이다.

def solution(order):
    answer = 0
    new_list = list(map(int,str(order)))
    for i in range(len(new_list)):
        if new_list[i] % 3 == 0:
            answer +=1
    return answer

테스트 해보면 오류가 나는데 0이 들어갔을 떄가 문제가 된다. -> 0을 예외처리

def solution(order):
    answer = 0
    new_list = list(map(int,str(order)))
    for i in range(len(new_list)):
        if new_list[i] != 0 and new_list[i] % 3 == 0:
            answer +=1
    return answer

현재 내가 생각한 최대한 계선한 점이다.

문제 4 로그인 확인?

id_pw값과 db에 있는 값을 비교해서 맞는지 틀리는지 확인하는건데
밑에 식의 문제는 fail이 어디에 들어가야 하는지 감을 못잡고 있는게 문제다.

def solution(id_pw, db):
    answer = ''
    for i in range(len(db)):
        if id_pw[0] ==db[i][0]:
            if id_pw[1] ==db[i][1]:
                answer = 'login'
                break
            else:
                answer = 'wrong pw'
                break
        else:
            answer = 'fail'
                
    return answer

else 위치 가 결국 문제였다.

profile
렌덤형 인간

0개의 댓글