문제
https://www.acmicpc.net/problem/16171
사용 언어
Python3
풀이 과정
처음엔 이렇게 풀었는데 틀렸습니다가 떠서 여러 예제를 집어넣어보여 빈 구멍을 찾았다..
import sys
S = sys.stdin.readline().strip()
K = sys.stdin.readline().strip()
word_index = 0
for i in range(len(S)):
if 48 <= ord(S[i]) <= 57: # ASCII 코드 정수 범위
continue
else:
if S[i] != K[word_index]: # 다른 문자 나오면 리셋
word_index = 0
if i == len(S)-len(K): # 남은 문자열이 K의 길이보다 작아지면
print(0)
break
else:
if word_index == len(K)-1: # K의 마지막 문자열도 일치하면
print(1)
break
word_index += 1 # 일치하면 다음 인덱스로
그 결과1. 숫자일 때 for문이 끝나면 13번째 줄 if문에 걸리지 않는 것2. 다른 문자가 나와서 리셋하자마자 그 문자가 찾는 문자열의 시작일 경우3. 일치했는데 마지막 문자일 때의 경우를 처리해주었고
import sys
S = sys.stdin.readline().strip()
K = sys.stdin.readline().strip()
word_index = 0
for i in range(len(S)):
if 48 <= ord(S[i]) <= 57: # ASCII 코드 정수 범위
if i == len(S)-1:
print(0)
break
continue
else:
if S[i] != K[word_index]: # 다른 문자 나오면 인덱스 리셋
word_index = 0
if i == len(S)-1:
print(0)
break
if S[i] == K[word_index]:
word_index += 1
else:
if word_index == len(K)-1: # K의 마지막 문자열도 일치하면
print(1)
break
if i == len(S)-1:
print(0)
break
else:
word_index += 1 # 일치하면 다음 인덱스로
이렇게 고쳤으나 계속 뜨는 틀렸습니다 ㅂㄷㅂㄷ
엄청 다양한 예제를 넣어보았는데 결과가 잘못 뜨거나 안 뜨는 경우를 찾지 못하고 결국 포기...
다른 방식으로 풀었더니 빠르게 뜬 맞았습니다!!
그래도 저 코드의 틀린점을 알고 싶다 아쉽고 찜찜해...ㅠ
제출 답안
import sys
S = sys.stdin.readline().strip()
K = sys.stdin.readline().strip()
str_list = []
for i in range(len(S)):
ascii = ord(S[i])
if 65<= ascii <= 90 or 97 <= ascii <= 122:
str_list.append(S[i])
str = ''.join(str_list)
if K in str:
print(1)
else:
print(0)
공부한 내용
문자열에 특정 문자열이 포함되어 있는지 확인하는 방법
1. if something in string:
특정 문자열이 포함되어 있는지 확인할 수 있다.
2. find()
find()는 문자열에 인자로 전달된 문자열이 존재할 때, 문자열의 위치에 해당하는 index를 리턴한다.이 때 문자열이 존재하지 않으면 -1을 리턴한다. find가 -1이 아니니 다른값을 리턴한다면 문자열이 포함되어 있다고 판단할 수 있다.
출처: https://codechacha.com/ko/python-find-str-in-str/
아스키코드 표
출처: https://velog.io/@gndan4/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%84%EC%8A%A4%ED%82%A4-%EC%BD%94%EB%93%9C-%EA%B4%80%EB%A0%A8-%ED%95%A8%EC%88%98
'코딩 테스트 스터디 > 백준' 카테고리의 다른 글
[실버 IV] 4881번. 자리수의 제곱 (0) | 2022.04.05 |
---|---|
[실버 IV] 24060번. 알고리즘 수업 - 병합 정렬 1 (0) | 2022.02.23 |
[실버 IV] 1764번. 듣보잡 (0) | 2022.02.20 |
[실버 V] 1316번. 그룹 단어 체커 (0) | 2022.02.20 |
[실버 IV] 1120번. 문자열 (0) | 2022.02.16 |