Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 플로이드-워셜
- 이분 탐색
- BFS
- SSAFY
- 슬라이딩 윈도우
- 수학
- Python
- 트리
- 해시 테이블
- boj
- 투 포인터
- 애드 혹
- 누적 합
- 13164
- 2357
- 정수론
- 정렬
- 모던 JavaScript 튜토리얼
- 맵
- 브루트포스
- DP
- 구현
- 그래프
- DFS
- 싸피
- 그리디
- 문자열
- 에라토스테네스의 체
- 세그먼트 트리
- JavaScript
Archives
- Today
- Total
흙금이네 블로그
[BOJ] 6550 - 부분 문자열 (Python, JavaScript) 본문
아이디어
순서대로 T에서 S의 문자들을 찾아 나간다.
풀이 #1 (Python)
테스트 케이스 수가 따로 주어지지 않으므로 sys.stdin.readlines으로 입력 값을 모두 읽는다.
각 테스트 케이스에서 find 메서드로 T에서 찾은 문자열 S의 문자들 인덱스를 차례로 idx에 저장하고,
그 다음 문자는 그 이후 인덱스부터 찾아 나가는 식으로 for문을 반복한다.
도중에 S의 문자가 T에 존재하지 않아 idx가 -1이 되면 No를 출력하고, S의 문자들을 모두 찾는 경우 Yes를 출력한다.
import sys
input = sys.stdin.readlines
for case in input():
S, T = case.split()
idx = -1
for c in S:
idx = T.find(c, idx+1)
if idx < 0:
print('No')
break
else:
print('Yes')
T의 문자들을 모두 돌며 S의 문자들을 일일이 비교하는 코드보다 find 메서드로 찾아 나가는 코드가 더 빨랐다.
# 더 느린 코드
N = len(S)
idx = 0
for t in T:
if t == S[idx]:
idx += 1
if idx >= N:
print('Yes')
break
else:
print('No')
풀이 #2 (JavaScript)
풀이 #1 코드와 마찬가지 방식으로 동작한다.
입력 값에서 trim을 해주지 않으면 끝에 개행 문자가 하나 포함되어 split으로 인해 배열에 빈 문자열이 하나 더 생긴다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
for (let i=0; i<input.length; i++) {
let [S, T] = input[i].split(' ');
let N = S.length;
let idx = -1;
for (let j=0; j<N; j++) {
idx = T.indexOf(S[j], idx+1);
if (idx < 0) break;
}
if (idx < 0) console.log('No');
else console.log('Yes');
}
'알고리즘' 카테고리의 다른 글
[BOJ] 19583 - 싸이버개강총회 (Python, JavaScript) (0) | 2023.01.25 |
---|---|
[BOJ] 1937 - 욕심쟁이 판다 (Python) (0) | 2023.01.25 |
[BOJ] 1256 - 사전 (Python) (0) | 2023.01.25 |
[BOJ] 10798 - 세로읽기 (Python, JavaScript) (0) | 2023.01.23 |
[BOJ] 12104 - 순환 순열 (Python) (0) | 2023.01.23 |
Comments