- Today
- Total
- Algorithm
- ์์์ ๋ ฌ
- leetcode
- ๋ค์ต์คํธ๋ผ
- ๋ฐฑ์ค
- Graph
- dp
- tree
- ์๋ฐ
- ๊ตฌํ
- array
- ์ธํด
- ์๋ฐ์์ ์
- database
- ๋ฐฑ์๋
- PS
- java
- ํ๋ก๊ทธ๋๋จธ์ค
- pytorch
- ์กธ์ ์ํ
- MST
- ๋ฌธ๋ฒ
- OOP
- ๋ฒจ๋งํฌ๋
- BFS
- spring
- ๊ทธ๋ฆฌ๋
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฃ๊ตฌ์กฐ
- CS
Partially Committed
[๋ฐฑ์ค 1256] ์ฌ์ (JAVA) ๋ณธ๋ฌธ
https://www.acmicpc.net/problem/1256
a ์ z ๋ก๋ง ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค๋ ๊ฒ์
n+m ๊ฐ ์ค์์ n ๊ฐ(ํน์ m ๊ฐ) ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์์ ๊ฐ๋ค. (a ๋ n ๊ฐ, z ๋ m ๊ฐ)
๊ฐ๊ฐ์ ๋ฌธ์์ด์ด ์ฌ์ ์ ๋ฐฐ์ด๋ก ์ด๋ฃจ์ด์ ธ์๋ค๊ณ ๊ฐ์ ํ๋ฏ๋ก,
k ๋ฒ์งธ ๋ฌธ์์ด์ ์์๋ด๊ธฐ ์ํด์๋, n+m ๊ฐ์ ๋ฌธ์ ์ค์์ n ๊ฐ (ํน์ m๊ฐ) ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋จผ์ ๊ตฌํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์, a ๋ฅผ ์ ํํ๋ค๊ณ ๊ฐ์ ํ๊ณ ๋๋จธ์ง ๋ฌธ์๋ค๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ k ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด ํด๋น ์๋ฆฌ์ ์ํ๋ฒณ a ๋ฅผ ์ ํํ์์ ๋ ๋ง๋ค ์ ์๋ ๋ฌธ์์ด์ ๊ฐ์๊ฐ k ๊ฐ ๋ณด๋ค ํฌ๋ค๋ ๊ฒ์ด๊ณ ์ด๋ ๊ณง k ๋ฒ์งธ ๋ฌธ์์ด์ด ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ฏ๋ก a ๋ฅผ ์ ํํ๋ค.
๋ง์ฝ์ a ๋ฅผ ์ ํํ๋ค๊ณ ๊ฐ์ ํ์ ๋ ๋๋จธ์ง ๋ฌธ์๋ค๋ก ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ k ๋ณด๋ค ์๋ค๋ฉด, a ๋ฅผ ์ ํํ๋ฉด ๋๋จธ์ง ๋ฌธ์์ด๋ค์ ์กฐํฉ์ผ๋ก ๋ง๋ค ์ ์๋ ๋ฌธ์์ด์ ๊ฐ์๊ฐ k ๊ฐ ๋ณด๋ค ์์ผ๋ฏ๋ก k ๋ฒ์งธ ๋ฌธ์์ด์ด ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ฏ๋ก z ๋ฅผ ์ ํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ z ๋ฅผ ์ ํํ๊ณ , ๊ฒฝ์ฐ์ ์ k ๋ฅผ ์ ๋ฐ์ดํธ ํด์ค๋ค.
โญ ์ ์ํด์ผ ํ ์ ์, m+n ๊ฐ์ ๋ฌธ์ ์ค์์ n(ํน์ m) ๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์๊ฐ long ์ ๋ฒ์๋ฅผ ๋ฐ์ด๋์ด์ overflow ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ฃผ์ด์ผ ํ๋ค. k ์ ์ ํ์ด 10^10 ์ด๋ฏ๋ก, ์กฐํฉ ํ ์ด๋ธ์ ๊ณ์ฐํ ๋, k ๊ฐ ๋ณด๋ค ํฌ๋ค๋ฉด ๊ทธ๋ฅ 10^10+1 ์ ๋๋ก ์ ์ฅํด์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฐํด๋ด์ผ ํ๋ค.
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
Scanner sc =new Scanner(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = sc.nextInt();
int m = sc.nextInt();
long k = sc.nextLong();
long [][] dp = new long[202][202];
// 1. ์กฐํฉ ํ
์ด๋ธ ๊ตฌ์ฑํ๊ธฐ
for(int i = 0; i <= 200; i++){
dp[i][1] = i; // ex) 3C1 = 3
dp[i][0] = 1; // ex) 3C0 = 1
dp[i][i] = 1; // ex) 3C3 = 1
}
for(int i = 1 ; i <= 200; i++){
for(int j = 1; j<=i; j++){
// i ๊ฐ์์ j ๊ฐ๋ฅผ ๋ฝ์ ๋ j ๊ฐ i ๋ณด๋ค ํด ์๋ ์์.
dp[i][j] = dp[i-1][j] + dp[i-1][j-1];
// ์๋ฅผ ๋ค์ด 5๊ฐ ์ค 3 ๊ฐ๋ฅผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค๋ฉด
// ์ด๋ 4๊ฐ ์ค์์ 2๊ฐ๋ฅผ ์ ํํ๊ณ ๋ง์ง๋ง์ ํ๋ฒ ๋ ์ ํํ๋ ๊ฒฝ์ฐ์ ์์
// 4๊ฐ ์ค์์ 3๊ฐ๋ฅผ ์ ํํ๊ณ ๋ง์ง๋ง์ ์ ํ์ ํ์ง ์์ ๊ฒฝ์ฐ์ ์์ ํฉ๊ณผ ๊ฐ์.
if(dp[i][j] > 1000000000)
dp[i][j] = 1000000001; // ์ค๋ฒ ํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด k ๊ฐ์ ์ต๋๋ก ์ ํํจ.
}
}
// 2. ์์ธ ์ฒ๋ฆฌ
if(dp[m+n][m] < k){
// ์ฌ์ ์ a ์ z ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฏ๋ก (m+n) ๊ฐ ์ค์์ m ๊ฐ ํน์ n ๊ฐ๋ฅผ ์ ํํ๋
// ๊ฒฝ์ฐ์ ์ ๋งํผ์ ๋ฌธ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์,
// m+n ๊ฐ ์ค์์ m ๊ฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ์ ์๊ฐ k ๊ฐ ๋ณด๋ค ์๋ค๋ฉด
// k ๋ฒ์งธ ๋ฌธ์์ด์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์ด๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ -1 ์ ์ถ๋ ฅ
System.out.println("-1");
return; // ๋ฉ์ธ ๋ฉ์๋ ์ข
๋ฃ
}
// 3. ์ฃผ์ด์ง ๋ฌธ์์ด ๋ง๋ค๊ธฐ
while(!(n==0&&m==0)){ // 'a' ์ 'z' ๋ฅผ ๋ค ์ฌ์ฉํ ๋ ๊น์ง ๋ฐ๋ณต
// ๋ง์ฝ a ๋ฅผ ์ ํํ๋ค๋ฉด?
if(dp[m+n-1][m] >= k){ // a ๋ฅผ ์ ํํ๋ค๊ณ ์น๊ณ ๋๋จธ์ง ๋ฌธ์์ด์ ๊ฒฝ์ฐ์์์ k ๋ฅผ ๋น๊ต
bw.append("a");
n--; // a ๋ฅผ ํ๋ ์ฌ์ฉํ ๊ฒ์ด๋๊น ๊ฐ์ ๊ฐ์
} else { // ๊ทผ๋ฐ k ๊ฐ ๋ ํฌ๋ค๋ฉด, a ๋ฅผ ์ ํํ๋ฉด k ๋ฒ์งธ ๋ฌธ์์ด์ ๋ง๋ค ์ ์์ด์ ์๋๋ค๋ ๊ฒ์
// ๊ทธ๋ฌ๋๊น z ๋ฅผ ์ ํํด์ผ ํจ.
bw.append("z");
k = k - dp[m+n-1][m]; // z ๋ฅผ ์ ํํ ๊ฒ์ผ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ์
๋ฐ์ดํธ ํจ
m--; // z ๋ฅผ ํ๋ ์ฌ์ฉํ ๊ฒ์ด๋๊น ๊ฐ์ ๊ฐ์
}
}
bw.flush();
bw.close();
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1463] 1๋ก ๋ง๋ค๊ธฐ (JAVA) (0) | 2023.01.27 |
---|---|
[๋ฐฑ์ค 1947] ์ ๋ฌผ ์ ๋ฌ (JAVA) (0) | 2023.01.27 |
[๋ฐฑ์ค 1991] ํธ๋ฆฌ ์ํ (JAVA) (0) | 2023.01.22 |
[๋ฐฑ์ค 1068] ํธ๋ฆฌ (JAVA) (0) | 2023.01.22 |
[๋ฐฑ์ค 1414] ๋ถ์ฐ์ด์๋๊ธฐ (JAVA) (0) | 2023.01.20 |