SWEA13240 정사각형 글꼴
간판의 가로, 세로 길이 그리고 기록될 문구가 주어지고, 사용할 수 있는 최대 글자 크기를 구하는 문제다.
사이즈를 점점 늘려가며 조건이 맞으면 갱신하고, 맞지 않으면 종료하면 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Solution {
static BufferedReader br;
static BufferedWriter bw;
static StringTokenizer st;
static int size = 0, H, W, N;
static int[] str_length;
static int calc() {
size = 1;
while (true) {
boolean pass = true;
int[] tmp = new int[H];
for (int i = 0; i < H; i++) {
tmp[i] = W;
}
int i = 0, j = 0;
while (true) {
if (W < str_length[j] * size) {
pass = false;
break;
}
if (tmp[i] >= str_length[j] * size) {
tmp[i] -= ((str_length[j] + 1) * size);
j++;
} else {
i++;
}
if (j == N) {
break;
}
if ((i + 1) * size > H) {
pass = false;
break;
}
}
if (!pass) {
return size - 1;
}
size++;
}
}
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int test_case = 1; test_case <= T; test_case++) {
st = new StringTokenizer(br.readLine(), " ");
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
str_length = new int[N];
if(N == 0 || H == 0 || W == 0) {
bw.write(String.format("#%d 0\n", test_case));
continue;
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
str_length[i] = st.nextToken().length();
}
size = calc();
bw.write(String.format("#%d %d\n", test_case, size));
}
bw.flush();
bw.close();
}
}
Author And Source
이 문제에 관하여(SWEA13240 정사각형 글꼴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mraz0210/SWEA13240-정사각형-글꼴저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)