- 코드를 간결하게 줄이는 연습을 하자.
[Java]
public String solution(String code) {
String ret = "";
int mode = 0;
for (int i = 0; i < code.length(); i++) {
char c = code.charAt(i);
if (mode == 0) {
if (c == '1') {
mode = 1;
} else {
if (i%2 == 0) {
ret += c;
}
}
} else if (mode == 1) {
if (c == '1') {
mode = 0;
} else {
if (i%2 != 0) {
ret += c;
}
}
}
}
if (ret.isEmpty()) return "EMPTY";
return ret;
}
야근한 머리로는 이런거밖에 못짜요 잉 힝
StringBuilder answer = new StringBuilder();
int mode = 0;
for (int i = 0; i < code.length(); i++) {
char current = code.charAt(i);
if (current == '1') {
mode = mode == 0 ? 1 : 0;
continue;
}
if (i % 2 == mode) {
answer.append(current);
}
}
return answer.length() == 0 ? "EMPTY" : answer.toString();
- StringBuilder 를 써서 성능 챙겼고
- 중언부언 하지 않고 깔끔했다..
[Python]
return "".join(code.split("1"))[::2] or "EMPTY"
?? 이게 뭐야
1. code 문자열을 문자 '1'을 기준으로 분할
2. 분할된 문자열 리스트를 빈 문자열 ""을 사용하여 다시 합침
3. [::2] -> [시작점:끝점:주기] --> 합쳐진 문자열에서 인덱스가 짝수인 문자만을 선택
4. 결과 문자열이 비어 있다면 "EMPTY"를 반환
- code = "a1bc1d"
-
- code.split("1") -> ["a", "bc", "d"]
- "".join(["a", "bc", "d"]) -> "abcd"
- "abcd"[::2] -> "ac"
- 출력: "ac"
answer = ''
mode = 0
for i in range(len(code)):
if code[i] == '1':
mode ^= 1
else:
if i % 2 == mode:
answer += code[i]
return answer if answer else 'EMPTY'
^= 는 비트연산자 중에 xor을 뜻합니다.
두 비트가 서로 같으면 0 다르면 1입니다.
따라서 mode가 0이면 결과는 1이되고, 1이면 같기때문에 0이됩니다.