scone-lemon

[IM 대비] BOJ_2999 비밀 이메일 본문

ALGORITHM/BOJ

[IM 대비] BOJ_2999 비밀 이메일

lemon-scone 2021. 8. 27. 16:54

https://www.acmicpc.net/problem/2999

 

2999번: 비밀 이메일

정인이는 원래 "bombonisuuladici"를 보내려고 했다. 이 메시지는 16글자이므로, 정인이는 1*16, 2*8, 4*4 행렬을 선택할 수 있다. R이 가장 큰 것은 4*4이므로, 4*4를 선택한다. 정인이가 만든 행렬은 다음과

www.acmicpc.net

 

 

package IM;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

// 비밀이메일
public class BOJ_2999 {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;
		
		String input = br.readLine();
		int size = input.length();
		int max = Integer.MIN_VALUE;
		
		for (int i = 1; i <= size; i++) {
			if (size%i==0 && i<=Math.sqrt(size)) {
				max = size/i;
			}
		}
		
		int col = max;
		int row = size/max;
		//System.out.println(col);
		//System.out.println(row);
		
		char[][] arr = new char[col][row];
		int num = 0;
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = input.charAt(num);
				num++;
			} 
		}
		//System.out.println(Arrays.deepToString(arr));
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				sb.append(arr[j][i]);
			}
		}
		System.out.println(sb.toString());
	}
}

 

 

깜빡하고 마지막 테스트케이스를 안 넣어 봤는데 백준에서 돌리자마자 indexoutof 어쩌구 에러가 났다. 알고보니 col과 row를 혼동해서 그런 것 같다. 구글에서 코드를 참고해서 아래와같이 수정했다.

 

package IM1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class BOJ_2999 {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		String input = br.readLine();
		int size = input.length();
		int col = 0, row = 0; // col:열, row:행
		
		for (int i = 1; i <= Math.sqrt(size); i++) {
			if(size%i==0) {
				col = i;
				row = size/i;
			}
		}
		
		char[][] map = new char[row][col];
		int cnt = 0;
		
		for (int r = 0; r < row; r++) {
			for (int c = 0; c < col; c++) {
				map[r][c] = input.charAt(cnt++);
			}
		}
		System.out.println(Arrays.deepToString(map));
		
		for (int c = 0; c < col; c++) {
			for (int r = 0; r < row; r++) {
				sb.append(map[r][c]);
			}
		}
		
		System.out.println(sb.toString());
	}
}