강의로 돌아가기
이동현

조건 설명이 모호하네요

조건 1, 2, 3 이
if if if 인지
if else if else if인지
if else if if인지
if if else if 인지 모호합니다.

if else if else if로 하면 정답이 나오네요.
문제에 추가적인 설명이 필요할 것 같습니다.

2 개의 답변
낙방여우

보고서 판단하셔야죠.

  1. 만약 stk이 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
  2. stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다.
  3. stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다.

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를 사용하지 않는 분기로 다양하게 구현할 수 있습니다.
개인의 지식에 기반한 알고리즘 분기 선정이 잘못된 것을 문제 탓으로 돌리지 않기를 바랍니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다.