단어 배열과 maxWidth 너비가 있다고 가정하면 각 줄이 정확히 maxWidth 문자 수를 가지며 완전히 정렬되도록 텍스트 형식을 지정해야 합니다. 우리는 탐욕스러운 접근 방식으로 말을 포장해야 합니다. 즉, 각 줄에 가능한 한 많은 단어를 넣습니다. 각 행에 정확히 maxWidth 문자가 포함되도록 필요한 경우 추가 공백 ' '을 채웁니다.
여기에서 단어 사이의 추가 공백은 가능한 한 균등하게 분배되어야 합니다. 줄의 공백 수가 단어 사이에 균등하게 분할되지 않으면 왼쪽의 빈 슬롯이 오른쪽의 슬롯보다 더 많은 공백이 할당됩니다. 텍스트의 마지막 줄은 왼쪽 정렬되어야 하며 단어 사이에 추가 공백이 삽입되지 않아야 합니다.
따라서 입력이 다음과 같은 경우
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
result
라는 하나의 배열을 만듭니다. -
범위 0에서 크기의 i에 대해 j만큼 i 업데이트
-
너비 :=0
-
범위 i의 j에 대한 크기 및 너비 + 크기 a[j] + j – i <=b,
-
너비 :=너비 + [j]의 크기
-
-
공백 :=1, 추가 :=0
-
j – 1 !=1이고 j !=a의 크기인 경우
-
space :=(b - 너비) / j – i – 1
-
추가 :=(b - 너비) 모드 (j – i – 1)
-
-
라인 :=a[i]
-
범위 i + 1에서 j까지의 k에 대해
-
공백의 공백 수를 줄로 연결
-
extra> 0이면 공백을 줄로 연결
-
추가로 1 감소
-
line :=a[k]를 line으로 연결
-
-
x :=줄의 크기
-
line :=(b - x) 공백 수를 line으로 연결
-
결과에 줄 삽입
-
-
반환 해상도
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } void print_vector(vector<vector<auto>> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << "["; for(int j = 0; j <v[i].size(); j++){ cout << v[i][j] << ", "; } cout << "],"; } cout << "]"<<endl; } class Solution { public: vector<string> fullJustify(vector<string> &a, int b) { vector <string> result; int i, j; for(i = 0; i < a.size(); i = j){ int width = 0; for(j = i; j < a.size() && width + a[j].size() + j - i <= b; j++){ width += a[j].size(); } int space = 1; int extra = 0; if(j - i != 1 && j != a.size()){ space = (b - width) / (j - i - 1); extra = (b - width) % (j - i - 1); } string line(a[i]); for(int k = i + 1; k < j; k++){ line += string(space, ' '); if(extra-- > 0){ line += " "; } line += a[k]; } int x = line.size(); line += string(b - x, ' '); result.push_back(line); } return result; } }; main(){ vector<string> v = {"I", "love", "coding.", "here", "we", "will", "write", "some", "program"}; Solution ob; print_vector(ob.fullJustify(v, 16)); }
입력
["I", "love", "coding.", "here", "we", "will", "write", "some", "program"] 16
출력
[I love coding., here we will, write some, program , ]