티스토리 뷰
💻JAVA 코드 바로보기
□문제 설명
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
□제한사항
- s는 길이 1 이상인 문자열입니다.
- s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
- 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )
□입출력 예
s | return |
"3people unFollowed me" | "3people Unfollowed Me" |
"for the last week" | "For The Last Week" |
🌼 JAVA 알고리즘
□초기화면

□풀이과정
공백을 기준으로 각 단어가 나누어지는 것을 확인했다 |
class Solution {
public String solution(String s) {
String answer = "";
String[] spaced = s.split(" ");
for (int i = 0; i < spaced.length; i++) {
System.out.println(spaced[i]);
}
return answer;
}
}

나누어진 각 단어의 첫글자(대문자로 바꿀 글자)를 확인하고, 해당 문자가 영문자일 경우 아스키코드를 사용하여 대문자로 교환했다 |
class Solution {
public String solution(String s) {
String answer = "";
String[] spaced = s.split(" ");
for (int i = 0; i < spaced.length; i++) {
System.out.println(spaced[i].charAt(0));
}
return answer;
}
}

class Solution {
public String solution(String s) {
String answer = "";
String[] spaced = s.split(" ");
for (int i = 0; i < spaced.length; i++) {
char temp = spaced[i].charAt(0);
if(temp>96&&temp<123) temp -= 32;
System.out.println(temp);
}
return answer;
}
}

위와 같은 흐름으로 진행했을 때 테스트에서는 통과되었지만, |
class Solution {
public String solution(String s) {
String answer = "";
String[] spaced = s.split(" ");
for (int i = 0; i < spaced.length; i++) {
if(i!=0) answer += " ";
//단어별 첫문자 대문자로 변경
char upper = spaced[i].charAt(0);
if(upper>='a'&&upper<='z') upper -= 32;
answer+=upper;
//첫문자 제외한 모든 문자 소문자로 변경
for(int j=1;j<spaced[i].length();j++){
char lower = spaced[i].charAt(j);
if(lower>='A'&&lower<='Z') lower += 32;
answer+=lower;
}
System.out.println(answer);
}
return answer;
}
}

풀이방법이 깔끔하지 않아 걱정했는데, 역시나 코드의 효율성이 많이 떨어져서인지 런타임에러가 발생했다 |

코드를 조금 더 단순화시키기 위해 split() 사용과 동시에 모든 문자를 소문자로 변경하도록 수정했다 |
class Solution {
public String solution(String s) {
String answer = "";
//모든 문자 소문자로 변경
String[] spaced = s.toLowerCase().split(" ");
for (int i = 0; i < spaced.length; i++) {
if(i!=0) answer += " ";
System.out.println(spaced[i]);
//첫문자를 대문자로 변경
answer+= Character.toUpperCase(spaced[i].charAt(0));
answer+= spaced[i].substring(1);
}
return answer;
}
}

실행시간을 줄이기 위해 StringBuffer를 사용하는 방법도 있었지만, 나는 기존의 풀이방식을 이용하고 싶었다 |
[질문하기]란에서 런타임 이슈를 찾아보니, 띄어쓰기의 조건을 세부적인것까지 지정해주어야 한다는 해결책이 있었다 1. 공백이 연속적으로 존재할 경우 2. 마지막 문자가 공백일 경우 |
class Solution {
public String solution(String s) {
String answer = "";
//모든 문자 소문자로 변경 후 분리
String[] spaced = s.toLowerCase().split(" ");
for (int i = 0; i < spaced.length; i++) {
//기본 띄어쓰기 적용
if(i!=0) answer += " ";
//띄어쓰기별 각 단어 temp
String temp = spaced[i];
//연속된 공백일경우
if ("".equals(temp)) {
answer += temp;
}
//첫문자가 영대소문자일 경우 규칙적용
else if(spaced[i].charAt(0)>='A'&&spaced[i].charAt(0)<='z'){
answer += Character.toUpperCase(temp.charAt(0)) + temp.substring(1);
}
//첫문자가 영대소문자가 아닌 경우(숫자)
else {
answer += temp;
}
}
//마지막 문자가 공백일경우
if (" ".equals(s.substring(s.length()-1)))
answer += " ";
return answer;
}
}

'[코테] > [Programmers Lv2]' 카테고리의 다른 글
[Programmers] Lv2_최댓값과 최솟값 (JAVA) (0) | 2021.12.25 |
---|---|
[Programmers] Lv2_최솟값 구하기 (JAVA) (0) | 2021.12.24 |
[Programmers] Lv2_행렬의 곱셈 (JAVA) (0) | 2021.12.23 |
[Programmers] Lv2_피보나치 수 (JAVA) (0) | 2021.12.22 |
[Programmers] Lv2_N개의 최소공배수 (0) | 2021.12.21 |
댓글
공지사항
최근에 올라온 글
TAG
- c언어 기출문제
- 기출문제
- 구름에듀
- COSPRO 2급
- 연습문제
- 구름 기출문제
- cospro기출
- groom
- C
- 알고리즘
- 배열
- 구름에듀 기출문제
- 배열활용문제
- 1급
- YBM기출
- programmers
- groomedu
- 코딩테스트
- c언어
- 코스프로
- 프로그래머스
- CosPro
- lv2
- Java
- YBM
- C++
- cospro기출문제
- lv1
- 자바
- Cos Pro
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함