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
- boj
- 정수론
- DFS
- SSAFY
- 누적 합
- 해시 테이블
- JavaScript
- 수학
- 문자열
- 플로이드-워셜
- 2357
- Python
- 13164
- 브루트포스
- 싸피
- 구현
- 그리디
- 애드 혹
- 투 포인터
- BFS
- 그래프
- 트리
- 세그먼트 트리
- 이분 탐색
- 에라토스테네스의 체
- 맵
- DP
- 모던 JavaScript 튜토리얼
- 정렬
- 슬라이딩 윈도우
Archives
- Today
- Total
흙금이네 블로그
[BOJ] 18312 - 시각 (Python, JavaScript) 본문
아이디어
규칙을 찾아 간단하게 계산할 수 있는 부분은 계산하여 처리하고, 나머지는 브루트포스로 처리한다.
풀이 #1 (Python)
한 자릿수 앞에는 0이 붙으며, 00부터 59까지의 수에서 0~5는 15번씩, 6~9는 6번씩 등장한다.
K가 등장하는 횟수를 m이라 한다면 00분 00초부터 59분 59초까지 K가 등장하는 총 횟수 x는
초와 상관없이 분에서 K가 등장하는 횟수와 분과 상관없이 초에서 K가 등장하는 횟수의 합(m×60×2)에서
분과 초에서 동시에 K가 등장하는 횟수(m^2)를 빼서 K가 0~5일 때는 1575, K가 6~9일 때는 684가 된다.
시에 대해서는 계산식을 세우는 것이 더 복잡할 것 같아 for문에서 문자열로 K의 포함 여부를 확인하도록 한다.
만약 시에서 K가 등장하면 분과 초에 상관없이 60×60인 3600번 등장하는 것이므로, 3600에서 x를 뺀 나머지를 더한다.
N, K = map(int, input().split())
x = 1575 if K < 6 else 684
res = x*(N+1)
for i in range(N+1):
if f'{K}' in f'{i}'.zfill(2):
res += 3600-x
print(res)
풀이 #2 (JavaScript)
풀이 #1과 같은 방식으로 동작한다.
padStart 메서드로 문자열 앞에 0을 채우고, includes 메서드로 K의 포함 여부를 확인한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString();
let [N, K] = input.split(' ').map(Number);
let x = K < 6 ? 1575 : 684;
let res = x*(N+1);
for (let i=0; i<N+1; i++) {
if (String(i).padStart(2, 0).includes(K)) res += 3600-x;
}
console.log(res);
'알고리즘' 카테고리의 다른 글
[BOJ] 2503 - 숫자 야구 (Python, JavaScript) (0) | 2023.02.01 |
---|---|
[BOJ] 1135 - 뉴스 전하기 (Python) (0) | 2023.01.31 |
[BOJ] 2213 - 트리의 독립집합 (Python) (1) | 2023.01.29 |
[BOJ] 1949 - 우수 마을 (Python) (0) | 2023.01.29 |
[BOJ] 1498 - 주기문 (Python) (0) | 2023.01.29 |
Comments