제출 코드
- 무려 5번의 시도 끝에 성공한 문제
- 처음에 런타임에러를 시간초과로 잘못봐서, 3회 제출까지는 최적화만 신경씀
- StringBuilder사용, tokenizer 시도 등
- split 사용하지 않고 tokenizer 써서 공백없이 한글자씩 떼오는거 찾아보기. 전에 수업시간에 배움.
-
두가지 예외사항을 고려하지 않아 두번 에러가 났다
-
[0][0]에서의
/ by zero
런타임에러→ 0,0은 행열 변환해도 바뀌지 않으니 연산없이 넣어줌
-
입력받는 문자열의 길이가 소수인 경우 :
ArrayIndexOutOfBounds
런타임 에러→ col과 row 값이 0으로 계산되어 행렬생성 과정에서 문제 생김
-
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B2999_secretEmail {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
StringBuilder sb = new StringBuilder();
int row=0, col=0, diff=Integer.MAX_VALUE;
int len = line.length();
// 행 & 열 값 구하기 (암호화 전의 행과 열)
int count=0;
for(int i=len-1; i>0; i--) {
if(len%i == 0) {
int tmp_c = i;
int tmp_r = len / i;
if (tmp_c < tmp_r) {
break;
}else if (tmp_c-tmp_r < diff) {
diff = tmp_c-tmp_r;
col = tmp_c;
row = tmp_r;
}
}
}
// case1. 문지열 길이가 소수인 경우
if(row==0) {
System.out.println(line);
return;
}
// case2. 문자열 길이가 합성수인 경우 - 암호화 전 행렬채우기
char[][] arr = new char[row][col];
arr[0][0] = line.charAt(0);
for(int i=1; i<len; i++) {
arr[i%row][i/row] = line.charAt(i);
}
for(int i=0; i<row; i++) {
for(int j=0; j<col; j++) {
sb.append(arr[i][j]);
}
}
System.out.println(sb);
}
}