관리 메뉴

100세까지 코딩

[프로그래머스] Lv0.코드 처리하기 본문

코딩테스트/자바

[프로그래머스] Lv0.코드 처리하기

100세까지 코딩 2023. 8. 27. 15:36
문제 설명

 

풀기 전 생각
  • 문제 설명이 너무 상세히 나와 쉽게 따라했다
  • charAt(), String.length(), String.equals() 사용하는 것을 익히는 문제라고 생각했다.
class Solution {
    public String solution(String code) {
        String answer = "";
        int mode = 0;
        String ret = "";
        for(int i = 0; i < code.length(); i++){
            if(mode == 0){  // mode가 0일때
                if(code.charAt(i)=='1'){ // 1이면 mode 바꾸기
                    mode = 1;
                }else{
                    if(i%2==0){  // 짝수면
                        ret += code.charAt(i);
                    }
                }
            }else{  // mode가 1일때
                if(code.charAt(i)=='1'){ 
                    mode = 0;
                }else{
                    if(i%2!=0){ // 홀수면
                        ret += code.charAt(i);
                    }
                }
            }
        }
        if(ret.equals("")){ // 빈 값이면
            ret = "EMPTY";
        }
        answer = ret;
        return answer;
    }
}
오류 및 개선
  • 물론 쉽게 오류없이 풀었지만 왜 난이도가 높은편인지 의아했다
  • 모범 답안을 보니 뒤통수를 맞은듯 했다...
  • 가독성과 성능이 좋은 모범 답안을 소개하려한다.
모범 답안
class Solution {
    public String solution(String code) {
        StringBuilder answer = new StringBuilder(); // String을 대신하여 성능, 메모리 up
        int mode = 0;
        for (int i = 0; i < code.length(); i++) {
            char current = code.charAt(i);
            if (current == '1') {
                mode = mode == 0 ? 1 : 0; // 삼항연산자로 가독성 up
                continue;
            }

            if (i % 2 == mode) { // mode가 1이면 홀수만 더하기, 0이면 짝수만 더하기
                answer.append(current); // append라는 메소드 사용
            }
        }
        return answer.length() == 0 ? "EMPTY" : answer.toString(); // 빈값이면 EMPTY 반환
    }
}
참고
String은 변경 불가능한 클래스이므로 문자열 수정이 많을땐 지양하자.
성능 저하, 메모리 낭비를 초래하기 때문이다.

 

String vs StringBuffer vs StringBuilder

 

[자바 공부] 문자열 (String, StringBuffer, StringBuilder)

한 눈에 정리 String StringBuffer StringBuilder 가변 여부 X O O 연산 속도 느림 중간 빠름 동기화 O O X 스레드 세이프 O O X 저장 위치 String pool Heap Heap 1) String 문자열을 대표하기 때문에 조작에 필요한 대

sjd0219.tistory.com