[Algorithms] 모험가 길드 Review

n = int(input())
x = list(map(int, input().split()))
# list : 'map' object has no attribute 'sort'
x.sort()
group = 0
person = 0
# group, person 제거 -> NameError: name 'group', 'person' is not defined

def solution(n, x):
    for i in x:
        global person
        person += 1
        # 1. UnboundLocalError: local variable 'person' referenced before assignment.
        # 2. global person += 1 -> syntaxError: invalid syntax
        if person >= i:
            global group
            group += 1
            person = 0
     return print(group)
     # IndentationError: unindent does not match any outer indentation level

solution(n, x)

🐥 HYUNJIN's PICK 시사점


1. 자료형 변경(list)

문제에서 x값과 그룹 구성 인원은 비례하고 그룹 수의 최댓값을 출력해야 하므로, x값을 오름차순으로 정렬하여 작은 x값부터 인원수를 채워야 가장 많은 그룹 수를 구할 수 있다.

따라서 x값을 오름차순으로 정렬해야하므로 list메서드인 sort를 사용하기 위해 map object에 list()를 사용해 자료형을 변경해주었다.


2. 로컬 변수

파이썬은 기본적으로 변수를 로컬 변수로 간주한다. 따라서 함수 코드 내에서 전역 변수를 지정하지않으면, 함수 내의 전역 변수를 로컬 변수로 간주한다. 이 때문에 함수 내의 코드가 전역 변수에 액세스할 때 'UnboundLocalError' 즉, 할당 전 참조된 지역변수라는 오류가 발생한 것이다.

해결을 위해 함수 내에서 전역 변수를 사용하기 전, global 키워드를 통해 변수를 전역으로 선언해주면 된다.

Ref : (Python) UnboundLocalError: local variable referenced before assignment.

🌈 전역 변수란?
함수 밖에서 만들어진 변수로 함수의 실행과 관계없이 지속적으로 유지되는 변수이다.

🌈 로컬 변수란?
함수 안에서 일시적으로 만들어진 변수로 함수가 실행되면 만들어지고 종료되면 함께 소멸된다.

좋은 웹페이지 즐겨찾기