티스토리 뷰
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
32
|
import java.util.Scanner;
public class boj_5904 {
static Scanner sc = new Scanner(System.in);
static int[] dp = new int[30];
public static void main(String[] args) {
int N = sc.nextInt();
dp[0] = 3;
for (int i = 1; i < dp.length; i++) {
dp[i] = (dp[i-1]*2) + (i + 3);
}
System.out.println(func(N));
}
static char func(int n) {
if (n == 1) return 'm';
if (n == 2 || n == 3) return 'o';
int i = 0;
while (dp[i] < n) i++;
if (dp[i] == n) return 'o'; // 끝
if (n - dp[i - 1] == 1) return 'm'; // 다음 칸
if (n - dp[i - 1] <= i + 3) return 'o'; // moo.... 에서 o 해당하는 칸
return func((n - dp[i - 1] - (i + 3)));
}
}
|
cs |
- 재귀, dp
- 길이 구하는 점화식이랑 규칙은 눈에 보이는데 함수 식을 어떻게 세울지 생각이 안났다.
- 어려움
- 길이는 주어진 식대로 S(k) = S(k-1) * 2 + (3 + k) 로 구할 수 있고 거의 2배씩 늘어나고 2^30 >= 10억
이니까 dp에 길이를 30까지만 저장해준다,
- base condition 으로 'moo' 에 맞게 설정한다.
- int i 값을 이용해서 지금 n이 S의 몇번째 index인지 찾아준다.
- S(k-1) | m o o .... | S(k-1) 에서 m o o .... 에 해당하는 부분을 따로 처리해주고 해당하지 않으면
n - dp[i-1] - (i+3) 을 다시 호출한다.
'PS > boj' 카테고리의 다른 글
boj)15650 - N과 M (2) (0) | 2020.11.16 |
---|---|
boj)15649 - N과 M (1) (0) | 2020.11.16 |
boj)2447 - 별 찍기 - 10 (0) | 2020.11.14 |
boj)16505 - 별 (0) | 2020.11.14 |
boj)1992 - 쿼드트리 (0) | 2020.11.13 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- HTTP 완벽가이드
- http
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- BOJ
- js array
- js promise
- 이펙티브자바
- 드림코딩
- dreamcoding
- 이펙티브자바 아이템59
- 김영한 JPA
- 백준
- 프로그래머스
- js api
- 킹수빈닷컴
- 이펙티브자바 스터디
- java
- Spring Security
- 패스트캠퍼스 컴퓨터공학 완주반
- GCP
- 김영한 http
- 이펙티브자바 아이템60
- ㅇㄷㅇㅈ
- JS 딥다이브
- 백기선 스터디
- 모던자바스크립트
- REST API
- HTTP 완벽 가이드
- JPA 연관관계 매핑
- 프로그래머스 SQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함