백준 3273 - 두 수의 합

 

해결 방법

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

+ Recent posts