문자열 S가 있고 주어진 문자열의 문자를 왼쪽에서 오른쪽으로 줄에 써야 한다고 가정합니다. 여기서 각 줄의 최대 너비는 100단위이며, 글자를 쓰면 줄의 너비가 100단위를 초과하면 다음 줄에 기록됩니다. 우리는 또한 배열 너비를 가지고 있습니다. 여기에서 widths[0]은 'a'의 너비이고, widths[1]은 'b'의 너비입니다.
우리는 두 가지 질문에 대한 답을 찾아야 합니다 -
- S의 문자가 하나 이상 포함된 줄 수
- 마지막 줄에 사용된 너비는 얼마입니까?
답은 길이가 2인 정수 목록으로 반환됩니다.
따라서 입력이 [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 10,10,10,10,10] 및 S ="bbbcccdddaaa"인 경우 'a'를 제외한 모든 문자의 길이가 10이고 문자열 "bbbcccdddaa"가 포함되므로 출력은 [2, 4]가 됩니다. 9 * 10 + 2 * 4 =98칸. 마지막 'a'는 첫 번째 줄에 2단위만 남아 있기 때문에 두 번째 줄에 쓴다. 따라서 답은 2줄에 두 번째 줄에 4단위를 더한 것입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 줄:=1, 개수:=0
- S의 각 i에 대해 다음을 수행합니다.
- count :=개수 + 너비[i의 ASCII - 97]
- 카운트> 100이면
- 줄 :=줄 + 1
- count :=너비[i의 ASCII - 97]
- [줄, 개수] 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def numberOfLines(self, widths, S): line = 1 count = 0 for i in S: count += widths[ord(str(i))-97] if count > 100: line += 1 count = widths[ord(str(i))-97] return [line, count] ob = Solution() print(ob.numberOfLines([4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10], "bbbcccdddaaa"))
입력
[4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10],"bbbcccdddaaa"
출력
[2, 4]