📑 1. 문제설명

입출력 예 설명
입출력 예 #1
["We", "are", "the", "world!"]의 각 원소의 길이인 [2, 3, 3, 6]을 return합니다.
입출력 예 #2
["I", "Love", "Programmers."]의 각 원소의 길이인 [1, 4, 12]을 return합니다.
💡 2. 풀이과정
✔️ 해결방법
매개변수로 받은 strlist의 길이만큼 결과값을 담을 배열(lengths)을 하나 선언 해 준다.
그리고 반복문을 돌려가며strlist각 요소(문자열)의 길이를 구해서 배열(lengths)에 담아 리턴한다.
✔️ length()와 length의 차이만 알면 쉬운 문제
`length` 는배열에서 사용 되고, `legnth();`는 문자열에서 사용된다.
2-1. length
length는 배열(array)의 길이를 나타내는변수(필드)이고 괄호 ()가 없으며, 배열의 크기를 확인할 때 사용된다.
사용법: `배열변수명.length`
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers.length); // 출력: 5
위 코드에서 `numbers.length`는 numbers라는 이름의 배열의 요소 개수를 나타낸다.
2-2.length()
length()는 문자열(String)의 길이를 반환하는 메서드이다. 괄호 ()가 있고, 문자열의 문자 개수를 확인할 때 사용한다.
사용법: `문자열변수명.length()`
String text = "Hello";
System.out.println(text.length()); // 출력: 5
위 코드에서 text.length()는 text라는 이름을 가진 문자열 "Hello"의 문자 개수(5)를 반환한다.
👨💻 3. 정답코드
import java.util.*;
class Solution {
public int[] solution(String[] strlist) {
int[] lengths = new int[strlist.length];
for (int i = 0; i < strlist.length; i++) {
lengths[i] = strlist[i].length();
}
return lengths;
}
}
👏🏻 4. 좋아요 가장 많이 받은 코드
✅ 1. 스트림으로 작성한 코드
스트림을 쓰면 코드가 간결해 지기 때문에 스트림으로 쓴 코드들이 좋아요를 많이 받는 추세이다.
하지만 코드가 짧아지는 것과 달리 실제로 테스트를 돌려 보면 스트림은 속도가 매우 느리다.
시간 제한 있는 문제에서는 사용하지 않는 것을 추천한다.
import java.util.Arrays;
class Solution {
public int[] solution(String[] strList) {
return Arrays.stream(strList).mapToInt(String::length).toArray();
}
}
✅ 2. 예외처리 코드
class Solution {
public int[] solution(String[] strlist) {
int[] answer = {};
answer = new int[strlist.length];
if(strlist != null) {
for(int i =0; i<strlist.length; i++){
answer[i] = strlist[i].length();
}
}
return answer;
}
}

이 사람은 예외처리 시도를 한 것까지는 좋았으나 예외 처리를 하는 위치가 적절하지 않다.
현재 if (strlist != null) 체크가 for 루프를 감싸고 있지만, 그보다 먼저 answer = new int[strlist.length];를 실행하고 있기 때문에 strlist가 null일 경우, strlist.length를 호출하는 순간 NullPointerException이 발생한다.
즉, if (strlist != null) 조건문이 의미가 없어지는 곳에 예외처리를 한 것이다.
⭐ 올바른 예외처리를 하려면 null 체크를 먼저 한 후, answer 배열을 초기화해야 한다.
아래처럼 수정해야 바른 코드이다.
class Solution {
public int[] solution(String[] strlist) {
// strlist가 null이면 빈 배열 반환
if (strlist == null) {
return new int[0];
}
int[] answer = new int[strlist.length];
for (int i = 0; i < strlist.length; i++) {
answer[i] = strlist[i].length();
}
return answer;
}
}
✅ 3. ArrayList로 리턴받은 코드
import java.util.*;
class Solution {
public ArrayList solution(String[] strlist) {
ArrayList<Integer> answer = new ArrayList<Integer>();
for(String str : strlist){
answer.add(str.length());
}
return answer;
}
}
형변환해서 반환하는 것도 가능하지만 첫번째랑 마지막 분 말씀에 동의한다

🐦 5. TMI
코테 문제는 웬만하면 Stream 쓰지 말자
Why?
스트림은 속도가 너무 느리다.
스트림 쓰면 안 되는 이유는 아래 블로그 ㄱ
Stream, 되도록이면 사용하지 말자
https://school.programmers.co.kr/learn/courses/30/lessons/12941 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는
eatit.tistory.com
알고리즘 문제는 Stream을 사용해서 풀면 안되는 걸까?
알고리즘에 대한 감을 잃지 않기 위해 문제를 꾸준히 풀어가는 중이다. 기존에는 레거시 자바문법을 이용해서 풀어냈다면, 요즘은 모던 자바의 기능들을 활용해서 문제를 풀어나가고 있다. 그
bperhaps.tistory.com
'코딩테스트 > JAVA테스트' 카테고리의 다른 글
| [프로그래머스] (Java) 삼각형의 완성조건(1) 문제풀이 (4) | 2025.03.31 |
|---|---|
| [프로그래머스] (Java) 중복된 문자 제거 문제풀이 (2) | 2025.03.31 |
| [프로그래머스] (Java) 컨트롤 제트 문제풀이 (4) | 2025.03.30 |
| [프로그래머스] (Java) 소인수분해 문제풀이 (SET) (5) | 2025.03.28 |
| [프로그래머스] (Java) 숨어있는 숫자의 덧셈 (1) 문제풀이 (1) | 2025.03.27 |