[LeetCode] Number of Lines To Write String

아르당·2026년 2월 27일

LeetCode

목록 보기
173/213
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

영어 소문자로 이루어진 문자열 s와 각 영어 소문자의 픽셀 너비를 나타내는 배열 widths가 주어진다. 구체적으로 widths[0]은 'a'의 너비이고, widths[1]은 'b'의 너비이다.

여러 줄에 걸쳐 문자열 s를 작성하는데, 각 줄의 길이는 100픽셀을 넘지 않아야한다. s의 시작 부분부터 첫 번째 줄에 글자를 최대한 많이 쓰되, 전체 너비가 100픽셀을 넘으면 안된다. 그 다음, 첫 번째 줄에서 멈춘 부분부터 두 번째 줄에 글자를 최대한 많이 작성해라. 이 과정을 s의 모든 글자를 쓸 때까지 반복해라.

길이가 2인 배열 result를 반환해라.

  • result[0]은 라인의 총 수이다.
  • result[1]은 마지막 라인의 픽셀 너비이다.

Example

#1
Input: widths = [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,10], s = "abcdefghijklmnopqrstuvwxyz"
Output: [3, 60]
Explanation: 아래처럼 작성할 수 있다.
abcdefghij // 100 픽셀 너비
klmnopqrst // 100 픽셀 너비
uvwxyz // 100 픽셀 너비
총 3 줄이 있고, 마지막 줄은 60 픽셀이다.

#2
Input: widths = [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"
Output: [2, 4]
Explanation: 아래처럼 작성할 수 있다.
bbbcccdddaa // 98 픽셀
a // 4 픽셀
총 2줄이 있고, 마지막 줄은 4픽셀이다.

Constraints

  • widths.length == 26
  • 2 <= widths[i] <= 10
  • 1 <= s.length <= 1000
  • s는 오직 영어 소문자로 구성된다.

Solved

class Solution {
    public int[] numberOfLines(int[] widths, String s) {
        int result = 1;
        int current = 0;

        for(char c : s.toCharArray()){
            int width = widths[c - 'a'];
            result = current + width > 100 ? result + 1 : result;
            current = current + width > 100 ? width : current + width;
        }

        return new int[] {result, current};
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글