Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자료구조 복습
- 머신러닝
- 숙명여자대학교 정보보안동아리
- Python
- BOJ Python
- 백준
- hackerrank
- Sookmyung Information Security Study
- 웹페이지 만들기
- HTML
- BOJ
- hackctf
- Javascript
- C언어
- CSS
- XSS Game
- 드림핵
- siss
- lob
- WarGame
- c
- 기계학습
- 생활코딩
- PHP 웹페이지 만들기
- 풀이
- 숙명여자대학교 정보보안 동아리
- SWEA
- The Loard of BOF
- 파이썬
- c++
Archives
- Today
- Total
혜랑's STORY
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)))
#실행 결과

'무지성 공부방 > 알고리즘 해결' 카테고리의 다른 글
[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 |