오늘은 갑작스런 난이도 상승으로 두 문제를 풀었는데 두시간이 갔다...
어제까진 원래 1시간에 3문제를 풀었었는데,,,
분명 같은easy
여도 체감난이도는 천차만별인갑다.
해석:
소문자 영어 문자로 이루어진 문자열s
와 각 소문자 영어 문자의 너비(픽셀)를 나타내는 배열widths
가 제공됩니다. 특히widths[0]
는 'a'의 너비이고,widths[1]
은 'b'의 너비입니다.한 줄 당
100
픽셀 이하로, 여러 줄에 걸쳐s
를 쓰려고 합니다. 첫 번째 줄에 전체 너비가100
픽셀을 초과하지 않도록s
의 시작 부분부터 글자 수를 적습니다.
그런 다음 두 번째 줄에s
가 멈춘 부분부터 가능한 한 많은 글자를 계속 쓰세요.s
를 끝까지 작성할 때까지 이 과정을 반복합니다.
입력:
- 매개변수
widths
: 알파벳 소문자 a~z까지 각각 배당된 픽셀 수가 들어간 리스트.widths.length==26
2 <= width[i] <= 10
- 매개변수
s
: 알파벳 소문자로 이루어진 문자열.1 <= s.length <= 1000
출력:
- [ 전체 라인 수, 마지막 라인에 입력된 픽셀 수 ]
이 문제에서 유의할 점은
그 문자를 입력할 때 한 라인의 최대 픽셀 수 100을 넘어가게되면,
그 다음줄부터 입력을 시작해야된다는 점이다.
class Solution:
def numberOfLines(self, widths: List[int], s: str) -> List[int]:
answer=[]
sumN=0
line=0
for i in range(len(s)):
sumN+=widths[ord(s[i])-97]
if sumN>100:
line+=1
sumN-=100
answer.append(line+1)
answer.append(sumN)
return answer
이 코드는 첫번째 입력 케이스를 돌리면 100으로 딱 떨어지기 때문에 잘 돌아갔지만,
두번째 입력 케이스 처럼 100에 걸치는 경우에 적용이 안되서 그 부분을 고민하다보니 20분이 끝나버렸다.
class Solution:
def numberOfLines(self, widths: List[int], s: str) -> List[int]:
answer=[]
sumN=0
line=0
for i in range(len(s)):
sumN+=widths[ord(s[i])-97]
if sumN>100:
line+=1
sumN=0
sumN+=widths[ord(s[i])-97]
answer.append(line+1)
answer.append(sumN)
return answer
sumN이 100을 넘게 될 때에 0으로 초기화 먼저 해주고
다시 해당 문자의 너비를 더해줌으로써 해결 완료!
생각은 유연하게! 코드는 단순하게!
나의 코딩 좌우명을 오늘도 머리에 새긴다.
24ms!