인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

한혜경님의 프로필 이미지
한혜경

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

투포인터 3번(#16472) 조건문 순서 질문드립니다!!

해결된 질문

작성

·

215

1

안녕하세요, 선생님. 매일매일 강의 잘 듣고 있습니다!

오늘은 투포인터를 공부하다 제가 작성한 코드와 제공해주신 정답 코드의 조건문을 확인하는 순서에 차이가 있어서 질문드립니다.

 

해당 문제를 풀 때 while 문 안의 아래 2가지 조건을 확인하는데요,

조건 1 if arr[e] in letter:

조건 2 if len(letter) < N:

제가 풀어봤을 때 저는 조건1 > 조건 2를 확인하도록 구현을 했는데

정답 코드는 조건2 > 조건 1를 확인하더라구요.

 

물론 저는 실제 정답인 4와는 달리 답이 5가 나와서 코드가 어디에선가 잘못되긴 한 것 같은데

틀린 이유가 조건문에 순서와 상관없이 제가 단순히 잘못 구현한 것인지

아니면 반드시 조건문을 조건2>조건1의 순서로 확인해야되는 문제인지 판단이 서지 않아 질문드립니다!

 

그리고 앞으로 다른 문제를 풀 때도 어떤 조건을 먼저 확인해야 되는 것인지 어떻게 판단하면 좋을지 판단 기준이 있는지도 궁금합니다 ^^

#[나의 코드]
N = int(input())
arr = list(input())

s = 0
e = 0
letter = []
letter.append(arr[s])
ans = 0

while s < len(arr) and e < len(arr):

    ans = max(ans, e-s+1)
    if arr[e] in letter: ####### 조건 1
        e += 1
    else:
        if len(letter) < N: ####### 조건 2
            letter.append(arr[e])
            e += 1
        else:
            s += 1
            e = s
            letter = [arr[s]]

print(ans)
#[정답 코드]
n = int(input())
arr = list(input())
arr.pop()

#inch-worm

s = 0
e = 0
letters = []
letters.append(arr[s])

dist = 0

start_flag = -1

while s < len(arr) and e < len(arr):
    # print(s,e,letters)
    dist = max(dist, e-s+1)
    if len(letters) <= n: ########조건 2
        e += 1
        if e < len(arr) and arr[e] not in letters: #######조건 1
            letters.append(arr[e])
    if len(letters) > n :
        s = s+1
        e = s
        letters = [arr[s]]

print(dist)

답변 1

0

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

질문 감사합니다!

 

제가 좋아하는 고양이 문제까지 푸셨군요!! 🙂 !!

 

조건의 순서는 상관없이, 식에 약간의 오류가 보입니다 ㅎㅎ ( 앞으로 문제를 푸실 때도, 조건의 순서는 크게 신경쓰지 않으셔도 됩니다! )

 

아래는 반례입니다! 확인해보시고 답글주세요!

 

2

abcde

 

2

aabbccdde

한혜경님의 프로필 이미지
한혜경

작성한 질문수

질문하기