BOJ_17389 보너스 점수
- TOC {:toc}
이 글은 백준 온라인 저지의 17389번 문제를 풀이한 것을 모아놓은 글입니다.
일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.
2021.08.03 (Python})
메모리 | 시간 | 코드 길이 |
---|---|---|
29200 KB | 84 ms | 192 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 22:59:09 | 23:00:57 | |
풀이 생각 | 23:00:58 | 23:01:11 | |
코딩 | 23:01:12 | 23:04:13 |
N = int(input())
OX = input()
bonus = 0
res = 0
for i in range(N):
if OX[i] == "O":
res += (i + 1 + bonus)
bonus += 1
else:
bonus = 0
print(res)
아이디어 & 풀이
문제에 주어진 조건 그대로 구현했다.
- 인덱스가
i
이면 문제 번호는i + 1
번이라는 것에 주의해야 한다.
2022.04.09 (JS)
메모리 | 시간 | 코드 길이 |
---|---|---|
10112 KB | 180 ms | 372 B |
단계 | 시작 시각 | 끝난 시각 | 걸린 시간 |
---|---|---|---|
문제 이해 | 01:56:03 | 01:57:12 | |
풀이 생각 | 01:57:13 | 01:57:56 | |
코딩 | 01:57:57 | 02:00:41 |
const fs = require("fs");
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");
function main() {
let res = 0;
let bonus = 0;
S.split("").forEach((c, i) => {
if (c === "O") {
res += i + 1 + bonus;
bonus += 1;
} else bonus = 0;
});
return res;
}
const [N, S] = input;
console.log(main());
참고 답안 1
_, S = input(), input()
res, bonus = 0, 0
for i, x in enumerate(S):
if x == "X":
bonus = 0
else:
res += i + 1 + bonus
bonus += 1
print(res)
아이디어 & 풀이
enumerate
로 인덱스와 값을 더 깔끔하게 이용할 수 있다.
참고 답안 2
input()
S = input()
res = sum(i for i, c in enumerate(S, 1) if c == "O")
for w in S.split("X"):
n = len(w)
res += n * (n - 1) // 2
print(res)
아이디어 & 풀이
- 우선
O
가 위치하는 인덱스 + 1의 값을 모두 더한다. - 연속된
O
의 리스트를 만든 다음 각 원소의O
의 개수를 세서 1부터 그 전 수까지의 합을 구한다.- 연속된
O
가 4개라면 첫O
부터 보너스 점수는 각각 0, 1, 2, 3점이므로 1부터 3까지의 합을 구하면 된다. - 1부터 n까지의 합이 $n(n + 1) / 2$이므로 1부터 n - 1까지의 합은 $n(n-1)/2$
- 연속된
-
ps-python ps-js