본문 바로가기
문제풀이/프로그래머스

Lv0.편지-java

by Ropung 2023. 10. 7.

[문제링크]

https://school.programmers.co.kr/learn/courses/30/lessons/120898

✔️요구사항

머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

✔️제한사항

  • 공백도 하나의 문자로 취급합니다.
  • 1 ≤ message의 길이 ≤ 50
  • 편지지의 여백은 생각하지 않습니다.
  • message는 영문 알파벳 대소문자, ‘!’, ‘~’ 또는 공백으로만 이루어져 있습니다.

✔️입출력 예

message result
“happy birthday!” 30
“I love you~” 22
  • 글자수가 15개로 최소 가로 30cm의 편지지가 필요합니다.
  • 글자수가 11개로 최소 가로 22cm의 편지지가 필요합니다.

✔️나의 문제풀이

class Solution {
    public int solution(String message) {
          return message.length() * 2;
    }
}
  • String을 length()함수로 길이를 구하고 2를 곱해서 해결하였다.
테스트 성능
테스트 1 〉 통과 (0.04ms, 74MB)
테스트 2 〉 통과 (0.02ms, 75.1MB)
테스트 3 〉 통과 (0.02ms, 73MB)

✔️다른사람의 문제풀이

class Solution {
    public int solution(String message) {
        int answer = 0;
        String[] ml = message.split("");
        for(int i=0; i<ml.length; i++){
            answer++;
        }
        return answer*2;
    }
}
  • 문자열을 split(“”)으로 각 문자 단위로 분할하여 배열에 작업하여 for문으로 문자열 길이를 더해주는 방법으로 해결하였다.
테스트 성능
테스트 1 〉 통과 (0.12ms, 78.2MB)
테스트 2 〉 통과 (0.23ms, 78.4MB)
테스트 3 〉 통과 (0.17ms, 77MB)

고민

  • length()매서드는 문자열의 길이를 직접 가져오는 것이므로 O(n) 시간복잡도로 작업을 수행하고 공간 복잡도가 O(1) 즉, 상수 시간이 걸린다.

  • 반면, split()매서드와 for 반복문을 함께 사용하는방법도 시간복잡도는 O(n)로 같지만 공간 복잡도가 O(n)가 된다.

  • length를 사용하는 방법이 간단하며 가독성이 좋고 후자의 경우 더 복잡해지며 많은 작업을 수행하게 되어 낭비라고 생각이 들었다.

  • split은 문자열을 배열로 변환하기에 메모리를 추가적으로 사용하게 된다.
    하지만 length() * 2는 추가 메모리를 필요로 하지 않아 메모리가 절약된다.

  • 성능상으로도 전자가 빠르다는 것을 확인할 수 있다.

'문제풀이 > 프로그래머스' 카테고리의 다른 글

Java - 배열의 유사도  (2) 2023.10.12
Java - 모음제거  (2) 2023.10.12
Lv0. 순서쌍의 개수 - java  (0) 2023.10.09
Lv0. 삼각형의 완성조건 (1) - java  (0) 2023.10.09