해결 방법
1️⃣ 파이썬의 특수 구문을 활용하면 문제를 간단히 해결할 수 있다. (for - in) x - ai 가 수열에 포함되는지 확인하면 된다.
2️⃣ 내가 작성하는 문법이 파이썬이 아님을 생각했을 때 다른 방식으로 풀 수 있다. 먼저 주어진 수열에서 max 값을 뽑은 다음, 그 크기만큼의 새로운 리스트를 만든다. 그 뒤, 리스트의 인덱스를 활용해서 입력받은 수열의 존재여부를 기록한다. 그리고 x - ai가 그 리스트에서 1 (존재) 인지 아닌지 체크한다.
어려웠던 점
✅ 배열의 인덱스에 따른 예외 처리를 생각하지 못했음.
새로 알게 된 점
✅ set과 list의 차이
접근 방법
1️⃣ 처음에는 set 대신 list를 사용했는데, 시간초과가 났고, list를 set으로 바꾸니까 해결되었다. 그리고 // 연산자 대신 /을 한 뒤 형변환을 했는데, //로 바꾸고 시간이 약간 줄었다.
N = int(input())
arr = set(map(int, input().split()))
X = int(input())
count = 0
for i in arr:
if X-i in arr:
count += 1
print(count//2)
2️⃣ 예외 처리를 고려하지 않아 런타임에러(IndexError)가 발생했었다.
N = int(input())
arr = list(map(int, input().split()))
X = int(input())
arr1 = [0] * (max(arr) + 1)
for i in arr:
arr1[i] = 1
count = 0
for i in arr:
remain = X - i
if remain < 0 or remain >= len(arr1): continue
if remain != i and arr1[remain] == 1:
arr1[i] = 0
count += 1
print(count)
2️⃣ 보다 1️⃣ 번이 훨씬 효율적이었다.
'Algorithm' 카테고리의 다른 글
[BOJ] 1475 방 번호 - 파이썬 (0) | 2024.08.20 |
---|---|
[BOJ] 2577 숫자의 개수 - 파이썬 (0) | 2024.08.19 |
[바킹독] 배열 (0) | 2024.08.17 |
[BOJ] 10808 알파벳 - 파이썬 (0) | 2024.08.06 |
[BOJ] 1629 곱셈 - 파이썬 (0) | 2024.08.04 |