반응형
문제: https://www.acmicpc.net/problem/9996
이 문제는 처음에 한번에 못풀었고, 반례를 보고 이해한 다음에 두번째 풀이끝에 성공했다.
문제를 풀 때 반례를 가능한한 많이 고려해야하고, 또 반례를 떠올리는 법을 반복적으로 연습해야 한다고 느꼈다.
❌ 첫번째 풀이 - 틀린 풀이
n = int(input())
expression = input().split("*")
start = expression[0]
end = expression[1]
for _ in range(n):
word = input()
if word.startswith(start) and word.endswith(end):
print("DA")
else:
print("NE")
해당 풀이는 65%에서 틀렸다는 결과가 나왔다. 도저히 반례를 떠올리기 쉽지 않아서 다른분이 올려주신 반례를 참고하니, 다음 테스트케이스에서 반례를 찾을 수 있었다.
1
aaa*a
aaa
답: NE
1
a*a
a
답: NE
주어진 word의 길이와 무관하게 시작하는지, 끝나는지를 체크하므로 1번 반례에서 a로 끝나므로 DA 라는 결과가 나왔다.
따라서 무조건 주어진 패턴의 * 앞 뒤의 길이를 합한것보다 크거나 같은지를 확인하는 조건을 추가해주었다.
✅ 두번째 풀이
n = int(input())
expression = input().split("*")
start = expression[0]
end = expression[1]
for _ in range(n):
word = input() # 길이 세는 조건문 추가
if len(word) >= len(start) + len(end) and word.startswith(start) and word.endswith(end):
print("DA")
else:
print("NE")
반응형
'⚙️ 알고리즘 > 문제풀이' 카테고리의 다른 글
99클럽 코테스터디 16일차 TIL - 프로그래머스 신규 아이디 추천, JadenCase 문자열 만들기, 경주로 건설 (0) | 2025.04.21 |
---|---|
99클럽 코테스터디 9일차 TIL - 백준 2437 (0) | 2025.04.10 |
99클럽 코테스터디 7일차 TIL - 백준 10799, 코드시그널 코딩테스트 준비 (0) | 2025.04.08 |
99클럽 코테스터디 6일차 TIL - 백준 4963, 백준 1012 (0) | 2025.04.08 |
[Python] 백준 11720, 11365, 16171 (0) | 2025.04.06 |