본문 바로가기

SWEA/D5

[SWEA 4411][D5][JAVA] 덕환이의 카드 뽑기

[문제]

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWNcL9nKpbEDFAV8

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

 

[풀이방법]

 

처음에는 덱으로 해서 K만큼의 숫자를 뒤로 넘겨주고 맨 앞의 원소를 지워주는 과정을 반복해서 값을 구하려고 했는데 마지막 예시 

100000 10000000000

여기에서 시간이 너무 오래 걸려서 불가능했습니다. 

 

그래서 찾아보니 요세푸스 점화식을 사용해서 해결할 수 있었어요 

 

요세푸스 점화식 / 

N명의 사람 중 K번째의 사람이 자결하는데 마지막까지 살아남는 사람을 구하는 점화식입니다. 

 

https://statkclee.github.io/r-algorithm/r-josephus-problem.html

이 포스트를 보면서 이해했습니다. 

 

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
 
public class Solution {
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        int T = Integer.parseInt(st.nextToken());
 
        StringBuffer sf = new StringBuffer();
        
        for (int k = 0; k < T; k++) {
            st = new StringTokenizer(br.readLine());
            long N = Long.parseLong(st.nextToken());
            long K = Long.parseLong(st.nextToken());
            
            long result = 0;
            
            for (int i =1; i <= N; i++ ) {
                result = (result + K) % i + 1;
            }
            sf.append("#" + (k+1+ " " + result + "\n") ;
            
        }
        System.out.println(sf.toString());
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'SWEA > D5' 카테고리의 다른 글

[SWEA] 1249. 보급로  (0) 2020.05.18
[SWEA] 4613. 러시아 국기 같은 깃발  (0) 2020.05.04
[SWEA] 1824. 혁진이의 프로그램 검증  (0) 2020.05.04
[SWEA 7393][D4][JAVA] 대규의 팬덤활동  (0) 2019.05.14