2999번: 비밀 이메일
정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과
www.acmicpc.net
R과C를 재귀함수를 사용하여 골랐다
유도파트: 길이/k ==0이고 k<=length/2인경우 R, C업데이트
재귀
기저조건: k>C인경우 return.
이렇게 하면 자동으로 제일 큰 R이 R값이 된다.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.Scanner;
public class 비밀이메일 {
static char[] jongin;
static char[][] get;
static int R,C;
public static void main(String[] args) throws FileNotFoundException {
System.setIn(new FileInputStream("input/비밀이메일.txt"));
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String str = sc.next();//정인이가 보낸 암호화된문자열
jongin = str.toCharArray();//문자형 배열에 저장
R=100;//행
C=100;//열
select(1,str.length());//1부터시작하며 암호문의길이전달, R과 C구하기
get = new char[R][C];
int cnt=0;
for (int j = 0; j < C; j++) {//정인이가 보낸 암호를 R과 C에맞추어서 행우선으로 배열에저장
for (int i = 0; i < R; i++) {
get[i][j] = jongin[cnt];
cnt++;
}
}
for (int i = 0; i < R; i++) {//상근이가 열 우선으로 읽기
for (int j = 0; j < C; j++) {
sb.append(get[i][j]);
}
}
System.out.println(sb);
}
private static void select(int k, int length) {
if(k > C) {//K가 길이의 반보다 커지면 종료
// System.out.println(R+" "+C);
return;
}
if(length%k==0 && k <=length/k) {//만약 길이가 k로 나누어지고 R<=C인경우 R과 C업데이트
R = k;
C= length/k;
}
select(k+1,length);//k+1을하며 계속 검사
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
백준-1012 유기농 배추 (0) | 2021.02.14 |
---|---|
백준-2667 단지번호붙이기 (0) | 2021.02.14 |
백준- 3985번 롤케이크 (0) | 2021.02.13 |
백준- 2941 크로아티아 알파벳 (0) | 2021.02.13 |
백준- 1158 요세푸스 문제 (0) | 2021.02.09 |
댓글