[백준] 1253번 : 좋다

James·2023년 9월 3일
0

코딩 테스트

목록 보기
27/41
post-thumbnail

문제

https://www.acmicpc.net/problem/1253

풀이

[백준] 1253번 : 좋다 🥇(골드 4)
🎯 24.264%
⏰ 걸린 시간 : 시간초과

  • 알고리즘 유형 : [투 포인터]

[투 포인터 알고리즘 푼 근거 및 회고]

  1. 투 포인터로 접근 하려고 했는데 반례가 발생하였다.
    <반례>
    4
    0 0 0 0
    output: 4

✔️ [문제풀이]
0. A 리스트를 정렬한다.
1. 0부터 N-1 까지 반복문을 통해 특정 원소(A[i])를 선택하고, 해당 원소를 제외한 리스트를 생성한다.
2. except_self 리스트에서 투 포인터를 이용하여 두 원소의 합이 nums[i]와 같다면 answer를 증가시킨다.
3. total이 A[i]보다 작다면 start 1증가
4. total이 A[i]보다 크다면 end 1 감소

코드(code)

import sys
input = sys.stdin.readline
N = int(input())
nums = list(map(int,input().split()))
nums.sort()
answer = 0
for i in range(N):
    except_self = nums[:i]+nums[i+1:] #자기 자신을 제외한 배열 생성
    start = 0
    end = len(except_self) -1

    while start < end:
        total = except_self[start] + except_self[end]
        if total == nums[i]:
            answer +=1 
            break

        elif total < nums[i]: # nums배열보다 total이 작을 경우에 start값을 늘려준다.  # 1 2 3 4 6에서 현재 nums[i]가 6면 start 1 end 4 일떄 
            start +=1
        else: # 지속적으로 하나씩 뺴줌 
            end -=1
print(answer)

회고

투 포인터 오답하면서 학습할 것.

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글