항해99/99club1기TIL

[99club/TIL] 3주차 - 일요일 TIL(Today I Learned)

delay100 2024. 4. 14. 22:19
728x90
반응형
SMALL

안녕하세요. delay100 입니다. 

 


미들러 문제. JadenCase 문자열 만들기 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 실패 코드 - 연속된 공백 고려하지 않음

  • 대문자 아스키코드 범위: A(65)~Z(90)
  • 소문자 아스키코드 범위: a(97)~z(122)
  • 그리고 문자열에 들어가는 값은 숫자, 소문자, 대문자가 유일함
  • 연속된 공백이 나올 수 있음

위의 4가지 조건을 고려하면 쉽게 풀리는 문제였습니다. 실패 코드에서는 마지막 조건을 고려하지 않았었습니다. 

import java.io.*;
import java.util.*;

class Solution {
    public String solution(String s) {
        boolean isBlank = true; 
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); i++) {
            char c = s.charAt(i);
            if(isBlank) {
                if(c>=97 && c<=122) {
                    sb.append(Character.toString(c-32));
                } else {
                    sb.append(Character.toString(c));
                }
                isBlank = false;
            } else {
                isBlank = false;
                
                if(c==' ') {
                    isBlank = true;
                    sb.append(Character.toString(c));
                } else if(c>=65 && c<=90) { // 대문자인 경우
                    sb.append(Character.toString(c+32));
                } else {
                    sb.append(Character.toString(c));
                }
            }
        }
        String answer = sb.toString();
        return answer;
    }
}

테스트2, 4, 11~14를 통과하지 못했습니다.

 

2. 성공 코드 

// 공백 문자가 연속으로 나온 경우
if(c==' ') {
    isBlank = true;
} else {
    isBlank = false;
}

위의 코드에서 현재 문자가 공백인 경우 처리할 때 조건을 한개 더 추가해서 해결했습니다.

import java.io.*;
import java.util.*;

class Solution {
    public String solution(String s) {
        boolean isBlank = true; 
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); i++) {
            char c = s.charAt(i);
            if(isBlank) {
                if(c>=97 && c<=122) {
                    sb.append(Character.toString(c-32));
                } else {
                    sb.append(Character.toString(c));
                }
            
                // 공백 문자가 연속으로 나온 경우
                if(c==' ') {
                    isBlank = true;
                } else {
                    isBlank = false;
                }
            } else {
                isBlank = false;
                
                if(c==' ') {
                    isBlank = true;
                    sb.append(Character.toString(c));
                } else if(c>=65 && c<=90) { // 대문자인 경우
                    sb.append(Character.toString(c+32));
                } else {
                    sb.append(Character.toString(c));
                }
            }
        }
        String answer = sb.toString();
        return answer;
    }
}


+ 비기너 문제

자릿수 더하기 (https://school.programmers.co.kr/learn/courses/30/lessons/12931)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

+ 챌린저 문제

2개 이하로 다른 비트 (https://school.programmers.co.kr/learn/courses/30/lessons/77885)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

봐주셔서 감사합니다. 피드백 환영합니다.

728x90
반응형
LIST