문제 링크
Note
오랜만에 도전한 프로그래머스 lv.2 문제입니다.
처음에 선택한 풀이 방법이 오히려 복잡해서 다시 생각하느라 오래 걸렸었습니다.
첫번째 아이디어
//주어진 s를 모두 소문자로 바꾼다.
//s를 " "로 split 해서 배열에 담는다.
//각 인자를 또 쪼개서 배열에 담는다.
//첫 인자가 숫자 또는 공백이면 변경 x, 영어면 대문자로 바꿔준다.
//다시 String으로 합쳐주는 작업을 2회 한다.
공백문자를 기준으로 배열에 담고 배열 인자의 첫 글자를 대문자로 바꿔주면 된다고 생각했지만 오히려 타입도 신경써야해서 메소드에 제약도 생기고 복잡했습니다.
두번째 아이디어
위 방법에서 단어를 담은 배열 인자를 Queue로 첫 글자만 바꿔담는 방법
고민해보고 시도했지만 역시 타입이 관련되면서 복잡해졌습니다.
최종 선택한 방법
배열에 나눠담지말고 Stack을 사용하며, stack에 담을 때부터 조건을 맞춰 담는 것이었습니다.
왜 처음부터 이 생각을 못 했을까요? stack은 저에게 만능열쇠 같네요. 제 코딩테스트는 stack을 알기 전과 후로 나뉩니다.
훨씬 간결하고 이해하기 쉬운 코드 완성 !
제출한 코드
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
//s를 모두 소문자로 바꾸고 문자열 배열에 하나씩 담는다.
//배열의 인자를 하나씩 조건에 따라 stack에 넣는다
//stack이 비어있으면 대문자로 바꿔넣고,
//stack의 peek가 공백문자면 대문자로 바꿔넣는다.
//그 외에는 모두 소문자로 넣는다.
//stack을 문자열로 변환한다. = answer
//전체 소문자로 바꾸고 배열로 만든다
String[] arrS = s.toLowerCase().split("");
//System.out.println(Arrays.toString(arrS));
Stack<String> Ans = new Stack<>();
for(int i = 0 ; i < s.length() ; i++){
if(Ans.isEmpty() || Ans.peek().equals(" ")){
Ans.push(arrS[i].toUpperCase());
} else {
Ans.push(arrS[i]);
}
}
answer = String.join("",Ans);
//System.out.println(Ans.toString());
return answer;
}
}
반응형
'코딩테스트 > Java' 카테고리의 다른 글
소프티어/자바 lv.1 나무 심기 - Java, 풀이, 힌트 (0) | 2024.03.27 |
---|---|
소프티어/자바 lv.1 위험한 효도 - Java, 풀이, 힌트 (1) | 2024.03.26 |
소프티어/자바 lv.1 [한양대 HCPC 2023] 개표 (0) | 2024.03.26 |
문제 링크
Note
오랜만에 도전한 프로그래머스 lv.2 문제입니다.
처음에 선택한 풀이 방법이 오히려 복잡해서 다시 생각하느라 오래 걸렸었습니다.
첫번째 아이디어
//주어진 s를 모두 소문자로 바꾼다.
//s를 " "로 split 해서 배열에 담는다.
//각 인자를 또 쪼개서 배열에 담는다.
//첫 인자가 숫자 또는 공백이면 변경 x, 영어면 대문자로 바꿔준다.
//다시 String으로 합쳐주는 작업을 2회 한다.
공백문자를 기준으로 배열에 담고 배열 인자의 첫 글자를 대문자로 바꿔주면 된다고 생각했지만 오히려 타입도 신경써야해서 메소드에 제약도 생기고 복잡했습니다.
두번째 아이디어
위 방법에서 단어를 담은 배열 인자를 Queue로 첫 글자만 바꿔담는 방법
고민해보고 시도했지만 역시 타입이 관련되면서 복잡해졌습니다.
최종 선택한 방법
배열에 나눠담지말고 Stack을 사용하며, stack에 담을 때부터 조건을 맞춰 담는 것이었습니다.
왜 처음부터 이 생각을 못 했을까요? stack은 저에게 만능열쇠 같네요. 제 코딩테스트는 stack을 알기 전과 후로 나뉩니다.
훨씬 간결하고 이해하기 쉬운 코드 완성 !
제출한 코드
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
//s를 모두 소문자로 바꾸고 문자열 배열에 하나씩 담는다.
//배열의 인자를 하나씩 조건에 따라 stack에 넣는다
//stack이 비어있으면 대문자로 바꿔넣고,
//stack의 peek가 공백문자면 대문자로 바꿔넣는다.
//그 외에는 모두 소문자로 넣는다.
//stack을 문자열로 변환한다. = answer
//전체 소문자로 바꾸고 배열로 만든다
String[] arrS = s.toLowerCase().split("");
//System.out.println(Arrays.toString(arrS));
Stack<String> Ans = new Stack<>();
for(int i = 0 ; i < s.length() ; i++){
if(Ans.isEmpty() || Ans.peek().equals(" ")){
Ans.push(arrS[i].toUpperCase());
} else {
Ans.push(arrS[i]);
}
}
answer = String.join("",Ans);
//System.out.println(Ans.toString());
return answer;
}
}
반응형
'코딩테스트 > Java' 카테고리의 다른 글
소프티어/자바 lv.1 나무 심기 - Java, 풀이, 힌트 (0) | 2024.03.27 |
---|---|
소프티어/자바 lv.1 위험한 효도 - Java, 풀이, 힌트 (1) | 2024.03.26 |
소프티어/자바 lv.1 [한양대 HCPC 2023] 개표 (0) | 2024.03.26 |