혜랑's STORY

SWEA 3752번 본문

무지성 공부방/알고리즘 해결

SWEA 3752번

hyerang0125 2020. 7. 13. 19:08

#문제

SWEA 3752번 문제

#풀이

 이 문제에서 핵심은 받을 수 있는 성적 중 중복되는 값을 확인해주는 것이라고 생각한다. 따라서 확인용 배열과 최종 결과를 저장할 배열을 따로 만들어둔다. 확인용 배열과 최종 배열을 저장할 배열의 1번째는 0으로 무조건 성립하기 때문에 미리 1(확인 값)과 0(실제 값)으로 초기화 해준다. 확인용 배열의 초기화는 첫번째 값인 1에 point안에 들어있는 요소들의 합 만큼 0으로 초기화 해준다. 이 배열의 역할은 값이 존재하면 1 아니면 0으로 검색하여 중복 여부를 알 수 있도록 하는 것이다. 그 뒤, 값이 중복되지 않았다는 것이 확인되면 확인용 배열의 자리를 1로 바꿔주고 최종 결과 배열에 실제 값을 추가해 준다. 최종으로 테스트 케이스의 번호와 최종 결과 배열의 길이(점수의 경우의 수)를 출력해 주면 된다.  

#코드

T = int(input('T : '))
for t in range(1, T+1):
    N = int(input('N : '))
    point = list(map(int, input('Point : ').split()))
    # 확인용 배열
    check = [1] + [0] * sum(point)
    # 최종 결과를 저장할 배열(0점은 무조건 나오기 때문에 미리 저장)
    result = [0]
    for i in point:
        temp = list(result)
        for j in temp:
            # 중복 확인
            if not check[i+j]:
                check[i+j] = 1
                result.append(i+j)
    print('#{} {}'.format(t, len(result)))

#실행 결과

SWEA 3752번 실행 결과

'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글

[BOJ_Python] 1431번, 1920번  (0) 2020.07.21
[BOJ _Python] 11650번, 10814번  (0) 2020.07.20
SWEA 7732번  (0) 2020.07.14
[BOJ_Python] 1026번  (0) 2020.04.06
[BOJ_Python] 1427번  (0) 2020.04.06