본문 바로가기

개발일지/TIL

TIL 23-03-24

https://github.com/sdoram/Algorithm_study

https://github.com/sdoram/git_basic

 

1. 프로그래머스 알고리즘 문제 - 약수 구하기 

 문제점

습관 처럼 += 으로 결과를 더 했는데 안 들어감

def solution(n):
    answer = []
    for i in range(1, n+1):
        if n % i == 0:
            answer += i
    return answer

 시도해 본 것들

append 사용

while문으로 해결 

 해결 방법

내가 푼 방법

def solution(n):
    answer = []
    for i in range(1, n+1):
        if n % i == 0:
            answer.append(i)
    return answer

 while문으로 바꿔본 방법

def solution(n):
    answer = []
    i = n+1
    while i > 1:
        i -= 1
        if n % i == 0:
            answer.append(i)
    answer.sort()
    return answer

팀원의 코드를 보고 만든 방법

def solution(n):
    answer = []
    [answer.append(i) for i in range(1, n+1) if n % i == 0]
    return answer

팀원의 range 범위 최적화를 보고 만든 방법

# 팀원의 range 최적화
#   for i in range(1,int(n**(1/2)+1)):

def solution2(n):
    answer = []
    answer.append(n)
    for i in range(1, int(n/2)+1):
        if n % i == 0:
            answer.append(i)
    answer.sort()
    return answer

수포자라 팀원의 알고리즘은 지금도 잘 이해가 안 되는데 참고하면서 만들어봤다.

i * 2를 해서 n이 되는 수가 n을 빼면 약수의 끝이니까 저기까지만 돌면 되는 것 같다 생각했고 결과는 잘 나온다.

for문을 10 기준으로 print()했을 때 팀원의 코드는 3까지, 내 코드는 5까지 나오는데 이해가 안 가니 쓰기 어렵다.

 알게 된 점

asnwer가 list로 돼있어서 append를 통해서 결과를 추가 해야했다.

한 번 푼 문제를 다른 식으로 바꾸는 것도 이해도를 높이기 좋은 방법 같다.

range를 도는 방식 자체를 깔끔하게 만들면 code의 효율성이 올라간다.

 

1. 프로그래머스 알고리즘 문제 - 가위 바위 보 

 문제점

while문으로 바꿔보는 중 IndexError: list index out of range 발생

def solution2(rsp):
    rsp = list(rsp)
    answer = ''
    count = 0
    while len(rsp) > count:
        count += 1
    if rsp[count] == '5':
        answer += '2'
    return answer

 시도해 본 것들

dir로 함수 확인

. index() 시도

 count += 1 바로 밑에 삽입하여 길이와 type 체크

print(type(count))
print(count)

count 위치를 while문 마지막으로 이동

 해결 방법

def solution2(rsp):
    rsp = list(rsp)
    answer = ''
    count = 0
    while len(rsp) > count:
        if rsp[count] == '5':
            answer += '2'
        elif rsp[count] == '2':
            answer += '0'
        else:
            answer += '5'
        count += 1
    return answer

 알게 된 점

count를 먼저 +1을 해버리면 len(rsp) +1까지 while문이 돌아서 if문에서 비교할 값이 없으므로 에러 출력

 

1. 프로그래머스 알고리즘 문제 - 영어가 싫어요 

 문제점

반복문을 이용해서 다시 푸는 중 replace가 두 개의 인자가 필요함.

def solution(numbers):
    count = 0
    answer = ''
    num_list = ["zero", "one", "two", "three", "four",
                "five", "six", "seven", "eight", "nine"]
    print(dir(numbers))
    while len(numbers) > count:
        if numbers.find(num_list[count]):
            numbers = numbers.replace(num_list[count])
        count += 1
    return answer

 시도해 본 것들

리스트에 리스트를 넣어서 인자를 두 개 받음

만들기는 했으나 테스트 시 몇 문제 런타임 에러 발생

def solution(numbers):
    count = 0
    num_list = [["zero", '0'], ["one", '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    while len(numbers) > count:
        if numbers.find(num_list[count-1][0]):
            numbers = numbers.replace(
                (num_list[count][0]), (num_list[count][1]))
        count += 1
    return int(numbers)

작동하는 누더기 코드지만 런타임 에러 한 개로 줄어듦 

def solution(numbers):
    count = 0
    num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    try:
        while len(numbers) > count:
            if numbers.find(num_list[count-count][0]):
                numbers = numbers.replace(
                    (num_list[count][0]), (num_list[count][1]))
            count += 1
    except:
        IndexError
    return int(numbers)

if문 제거 했지만, 아직 런타임 에러 1개 발생 

ef solution(numbers):
    count = -1
    num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    try:
        while len(numbers) > count:
            numbers = numbers.replace(
                (num_list[count][0]), (num_list[count][1]))
            count += 1
    except:
        IndexError
    return int(numbers)

 

def solution(numbers):
    count = 0
    num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    while len(numbers) > count:
        numbers = numbers.replace(
            (num_list[count][0]), (num_list[count][1]))
        count += 1
    return int(numbers)

해결 방법

결국 while문을 포기했다. 

def solution(numbers):
    num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    for i in range(len(num_list)+1):
        numbers = numbers.replace(
            (num_list[i-1][0]), (num_list[i-1][1]))
    return int(numbers)

완성한 for문을 찬찬히 뜯어보자 반복문의 조건이 len(num_list)으로 설정되어 있어서 바꿨더니 작동한다.

def solution(numbers):
    count = 0
    num_list = [["zero", '0'], ['one', '1'], ["two", '2'], ["three", '3'], ["four", '4'],
                ["five", '5'], ["six", '6'], ["seven", '7'], ["eight", '8'], ["nine", '9']]
    while len(num_list) > count:
        numbers = numbers.replace(
            (num_list[count][0]), (num_list[count][1]))
        count += 1
    return int(numbers)

 알게 된 점

while문이 너무 오래 도는 걸 생각하면서도 while문의 조건을 바꿀 생각을 안 했었다.

 

 

'개발일지 > TIL' 카테고리의 다른 글

TIL 23-03-26  (0) 2023.03.26
TIL 23-03-25  (0) 2023.03.25
TIL 23-03-23  (3) 2023.03.23
TIL 23-03-22  (2) 2023.03.22
TIL 23-03-21  (0) 2023.03.21