보고서 판단하셔야죠.
1번과 2,3번은 동시에 있을 수 없는 상황이니까 if와 else if로 나누고 2번과 3번도 동시에 있을 수 없는 상황이니까 if else if로 나눌 수 있겠죠. 그런데 님이 적어놨듯이 if else if else if로도 구현이 가능합니다. 사실 if if if로도 가능하고 if else if if로도 가능하고 if if else if로도 가능합니다. 단지 그에따른 조정이 필요할 뿐이죠. 예를 들어 볼까요?
for(int i = 0;i<arr.length;i++){
if(al.empty()){
al.push(arr[i]);
i++;
ch=true;
if(i==arr.length) break;
}
if(!al.empty()&&al.peek()==arr[i]){
al.pop();
i++;
ch=true;
if(i==arr.length) break;
}
if(!al.empty()&&al.peek()!=arr[i]){
al.push(arr[i]);
i++;
ch=true;
if(i==arr.length) break;
}
i--;
}
al은 stack의 변수명입니다. 이렇게 if if if로도 통과가 됩니다. 단지 i--같이 값을 조정하기 위한 추가 동작이 필요할 뿐이죠. 나머지 if else if if... 같은 방식들로도 통과가 가능합니다. if else if else if가 가장 간단하기 때문에 이것만 정답이라고 생각하신건지는 모르겠지만 적어도 이 문제에서 if if if, if else if if,...는 선택이었다는 거죠.
하나도 모호하지 않습니다. 한국어에 내재된 알고리즘 논리를 자신의 프로그래밍 알고리즘과 자신의 프로그래밍 언어로 번역하는 것이 개발자의 능력입니다.
for 커서탐색
if 비었어
추가해
continue
if 똑같아
지워
continue
추가해
이런 알고리즘 구현도 정답이 되며, continue를 사용하기 때문에 다음 if를 조회하지 않습니다.
이렇게 서술하지 않고, 모든 조건을 동일한 if수준에 분기로 두면,
for 커서탐색
if 비었어
추가해
else if 똑같아
지워
else
추가해
이 코드도 완전히 똑같은 알고리즘으로 실행이 됩니다.
첫번째 개발자의 자질은 알고리즘을 잘 구성하는 것이고,
두번째로는 그 알고리즘을 여러가지 가능한 구현방법 중 하나로 선택하여 구현하는 겁니다. 하나의 알고리즘도 이렇게 continue를 사용하는 분기와 continue를 사용하지 않는 분기로 다양하게 구현할 수 있습니다.
개인의 지식에 기반한 알고리즘 분기 선정이 잘못된 것을 문제 탓으로 돌리지 않기를 바랍니다.