BOJ_1543 문서 검색
- TOC {:toc}
이 글은 백준 온라인 저지의 1543번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.05.18 (Python)
메모리 | 시간 | 코드 길이 |
---|---|---|
28776 KB | 72 ms | 214 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 17:40:13 | 17:41:23 | |
풀이 생각 | 17:41:25 | 17:42:21 | |
코딩 | 17:43:06 | 17:46:12 | |
디버깅 1 | 20:20:49 | 20:26:42 | |
디버깅 2 | 20:28:49 | 20:44:07 |
import sys
input = lambda: sys.stdin.readline().rstrip()
d = input()
w = input()
l = len(w)
c = 0
i = 0
while i < len(d) - (l - 1):
if d[i : i + l] == w:
c += 1
i += l - 1
i += 1
print(c)
아이디어 & 풀이
최소로 중복해서 세려면 되도록 앞에 있는 것을 먼저 세는 게 좋기 때문에 앞의 단어를 넘어가고 뒤의 단어를 세는 경우는 없다.
- 순차 탐색으로 풀 수 있다.
디버그
readline()
으로 받았더니 끝에 줄 바꿈 문자가 있어서len()
값도 안 맞고 글자 일치 조건도 만족하지 못했다.l - 1
씩 넘어가야 했는데l
씩 넘어가서 글자를 한 개씩 더 건너뛰었다.- 반복 범위 설정도
len(d) - l
로 잘못 작성했다.
2022.03.22 (JS)
메모리 | 시간 | 코드 길이 |
---|---|---|
9380 KB | 124 ms | 449 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 14:15:39 | 14:16:47 | |
풀이 생각 | 14:16:48 | 14:17:26 | |
코딩 | 14:17:27 | 14:22:57 | |
디버깅 | 14:23:22 | 14:23:22 |
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().split("\n");
const [S, W] = input;
function main(S, W) {
const slen = S.length;
const wlen = W.length;
let count = 0;
let i = 0;
while (i <= slen - wlen) {
if (S.slice(i, i + wlen) === W) {
count += 1;
i += wlen;
} else {
i += 1;
}
}
return count;
}
console.log(main(S, W));
디버그
- 반복 조건을
i < slen - wlen
으로 설정했는데 이러면 마지막 단어 단위를 체크하지 않고 넘어간다. 조건에 등호 붙여서 해결.
참고 답안 1
print(input().count(input()))
아이디어 & 풀이
중복되지 않게 개수를 세주는 count()
메소드가 존재한다.
- str.count() by Python Documentation
참고 답안 2
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().split("\n");
let [S, W] = input;
function main(S, W) {
const wlen = W.length;
let count = 0;
while (S.indexOf(W) !== -1) {
const i = S.indexOf(W);
S = S.slice(i + wlen);
count += 1;
}
return count;
}
console.log(main(S, W));
아이디어 & 풀이
- 인자와 일치하는 항목을 안에서 찾는
indexOf
를 이용해서 해당 단어를 포함하는지 확인하고, 기존 문자열S
에서 해당 단어까지 잘라내 새 문자열을 구성한다.
-
ps-python