연습장
21. 코드 처리하기 본문
Q . 문자열 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,000
code는 알파벳 소문자 또는 "1"로 이루어진 문자열입니다.
꽤 긴 문제이다. 순간 이해가 되질않았다.
정리해보자면
문자열이 들어있는 code = " ~~~~~~" 를 주고
그 문자열에서 한개씩 ( code[i] ) 꺼내서 조건에 비교를 하는데
1. 꺼낸 문자가 '1' 일경우
-> mode 의 값을 0 -> 1 또는 1 -> 0 으로 바꾸는 일종의 스위치라고 보면된다.
2. 꺼낸 문자가 '1' 이 아닌 다른 문자일 경우
-> mode 의 값에 따라
2-1. mode 가 0 일경우
-> code 문자에서 짝수번째 문자 일 경우 ret 에 저장한다.
-> 0번째 2번째 4번째 .... 등등
2-2. mode 가 1일경우
-> code 문자에서 홀수번째 문자 일경우 ret 에 저장한다.
간단하게 만들어 보려고했으나 머리만 아파져서
문제 조건에 충실하게 흐름을 따라서 풀었다.
mode 의 값을 0으로 지정하고
code 의 length 보다 작은 범위에서 하나씩 가져와서 for 문을 적용하였다.
1. mode 가 0 일때 , code[i] 가 '1' 이아니고 (mode 값 일정) + i (인덱스) 가 짝수일때
answer 에 문자를 더해서 저장해 놓는다.
2. mode 가 0 일때, code[i] 가 '1' 이면 mode 값 을 변경
3. mode 가 1 일때 , code[i] 가 '1' 이아니고 (mode 값 일정) + i (인덱스) 가 홀수일때
answer 에 문자를 더해서 저장해 놓는다.
4. code[i] 가 '1' 이면 mode 값 을 변경
5. ret (answer) 의 길이가 0 이면 EMPTY 라는 조건이 문제에 있다.
function solution(code) {
var answer = '';
let mode = 0;
for (let i = 0 ; i< code.length; i++){
if (mode == 0) {
if (code[i] != '1' && i%2==0) {
answer += code[i]
}
else if (code[i] =='1') {
mode = 1;
}
}
else {
if (code[i] != '1' && i%2==1){
answer += code[i]
}
else if (code[i] =='1') {
mode = 0;
}
}
}
if (answer.length == 0) {
return "EMPTY"
}
return answer;
}
'프로그래머스 > 0단계' 카테고리의 다른 글
23. 주사위 게임 2 (0) | 2023.06.19 |
---|---|
22. 등차수열의 특정한 항만 더하기 (0) | 2023.06.19 |
20. flag에 따라 다른 값 반환하기 (0) | 2023.06.19 |
19. 조건 문자열 (0) | 2023.06.19 |
18. 홀짝에 따라 다른 값 반환하기 (0) | 2023.06.19 |