프로그래머스 리뷰

sihwan_e·2020년 11월 25일
0

파이썬 부실공사

목록 보기
2/2

1. 코드에서 indentation의 중요성

다중 for문에서 나오는 결과를 제어하려면 return의 위치를 조정하면 된다.

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
            return answer
print(solution([2, 1, 3, 4, 1]))

>>>    [3]
def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
        return answer
print(solution([2, 1, 3, 4, 1]))

>>>    [3, 5, 6, 3]
def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
    return answer
print(solution([2, 1, 3, 4, 1]))

>>>    [3, 5, 6, 3, 4, 5, 2, 7, 4, 5]

Indentation 에 따른 결과 값의 차이

일단 이게 함수 라는 것을 인지 해야하는데, return의 위치를 보자

첫번째 코드는 return이 반복문의 첫 결과에서 있기 때문에 당연히 리턴값도 제일 첫번째 것이 나오고 코드가 종료된다.

원하는 결과값을 얻고싶으면
라인을 딱 맞춰서 return을 위치시킬것.

2. set 은 add , list는 append

3. list.sort vs sorted(list)

def solution(numbers):
    answer = set()
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            result = numbers[i] + numbers[j]
            answer.add(result)

    answer = list(answer).sort()
    return answer

반환값: 없음
listname.sort()는 원본 리스트를 정렬하되, 반환값이 None이다.
그래서 원본 리스트에는 변화가 있다.

def solution(numbers):
    answer = set()
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            result = numbers[i] + numbers[j]
            answer.add(result)

    answer = sorted(list(answer))
    return answer

반환값: [2, 3, 4, 5, 6, 7]
sorted(list)는 새로운 리스트를 반환한다.
하지만 원본리스트에는 변화가 없다.

미리 리스트의 순서를 바꿀거면 sort()를,
결과 값에서 순서를 바꿔 출력할때엔 sorted를 쓰는것이 좋을 것같다.
sort는 일단 새로운 복사본이 생기지 않기 때문에, 속도가 sorted보단 빠르다.

4.문자열의 곱셈 활용

def solution(phone_number):
    return "*" * len(phone_number[:-4]) + phone_number[-4:]

5.리스트에 넣기 실수

def solution(answers):
    winner = []
    a = [1,2,3,4,5]
    b = [2,1,2,3,2,4,2,5]
    c = [3,3,1,1,2,2,4,4,5,5]
    
    count = [0,0,0]
    
    x = (len(answers)//len(a))+(len(answers) % len(a))
    y = (len(answers)//len(b))+(len(answers) % len(b))
    z = (len(answers)//len(c))+(len(answers) % len(c))
    ax = a * x
    by = b * y  
    cz = c * z
    
    for i in range(len(answers)):
        if answers[i] == ax[i]:
            count[0] += 1
        if answers[i] == by[i]:
            count[1] += 1
        if answers[i] == cz[i]:
            count[2] += 1
    
    for i in range(3):
        if count[i] == max(count):
            winner.append(i+1)
    

    return winner

count = [] 으로 해뒀다가 당연히 넣어야할 건 3갠데 out of range오류떳음

6. 빈리스트이용과 continue의 활용(feat.오늘 나에게 가장 실망했던 문제)

def solution(s):
    a = []
    for i in s:
        if a[-1:] == [i]: continue
        a.append(i)
    return a

일단 충분히 생각할수 있었는데 , 바로 생각이 나지 않았다는건 내가 아직 부족하다는 거고.(인정)

continue

1	for i in range(10):
2	    if i % 2 == 0:
3	        continue
4	        print(i)    
5	    print(i)
6	print("Done")
>>>
1
3
5
7
9
Done

continue는 조건이 만족했을때 실행이되서
실행이 되면 4, 5, 6 번은 무시하고
다시 1번으로 돌아간다.

profile
Sometimes you gotta run before you can walk.

0개의 댓글