프로그래머스 “코드 처리하기” 문제 해결과정입니다.
코드 처리하기
문제설명
문자열 code가 주어집니다.code를 앞에서부터 읽으면서 만약 문자가 “1”이면 mode를 바꿉니다. mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.
mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.
mode가 0일 때code[idx]가 “1”이 아니면idx가 짝수일 때만ret의 맨 뒤에code[idx]를 추가합니다.code[idx]가 “1”이면mode를 0에서 1로 바꿉니다.
mode가 1일 때code[idx]가 “1”이 아니면idx가 홀수일 때만ret의 맨 뒤에code[idx]를 추가합니다.code[idx]가 “1”이면mode를 1에서 0으로 바꿉니다.
문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.
단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 “EMPTY”를 return 합니다.
제한사항
- 1 ≤
code의 길이 ≤ 100,000code는 알파벳 소문자 또는 “1”로 이루어진 문자열입니다.
입출력 예
| code | result |
|---|---|
"abc1abc1abc" | "acbac" |
문제 해결과정
프로그래머스 코드
class Solution {
public String solution(String code) {
int mode = 0;
StringBuilder result = new StringBuilder();
for(int i = 0; i < code.length(); i++) {
if(mode == 0) { // mode가 0일때
if(code.charAt(i) == '1') {
mode = 1;
}else {
if(i % 2 == 0) { // i가 2로 나누어 떨어질 때만
result.append(code.charAt(i));
}
}
}else if(mode == 1) { // mode가 1일때
if(code.charAt(i) == '1') {
mode = 0;
}else {
if(i % 2 != 0) {
result.append(code.charAt(i));
}
}
}
}
if(result.length() == 0) {
return "EMPTY";
}
return result.toString();
}
}
문제에 나온대로 mode를 0으로 초기화 한다. StringBuilder로 ret를 선언한다. 문제에서 "idx를 0부터 code의 길이 - 1 까지 ” 라고 친절히 알려준다. for 반복문을 사용하여 mode가 0일때와 1일때로 나눈다. 만약 mode가 0일때 code(idx)가 ‘1’이면 mode를 1로 변경, 아니라면 code(idx)가 ‘1’이 아니고 idx가 짝수 일때 ret에 추가하는 코드를 작성했다. mode가 1일때도 마찬가지로 if문 안의 조건만 수정하였다. 이후 마지막으로 result의 내용이 있는 지 없는지 확인하기 위해 length()를 사용하여 길이가 0일때(아무것도 없을 때) “EMPTY”를 반환하도록 코드를 작성하였다. 스트링 빌더를 사용할 때 주의 할 점은 리턴 값이 String일 때 스트링 빌더 그대로 리턴하면 타입이 달라 오류가 발생한다. 스트링 빌더의 toString() 메소드를 사용하여 리턴하였다.