본문 바로가기
2222
Algorithm/plz Remember

0과 1 상태 변환(값을 서로 바꾸거나 제자리에서 바꾸거나)

by PARK TAE JOON 2021. 7. 24.

여기서 기억해야 할 테크닉은

found 변수를 이용해서

for else를 구현한 것.

/*
  상태변환
  1. 임의로 0과 1 두 개를 선택해서 서로 위치를 교환.
  2. 임의로 0또는 1 한개를 선택해 뒤집는다.

  예시.
  11000111. 목표 11100110
  3번째 0과 8번째 1을 서로 바꾸면 1번만에 목표 달성.
  최소횟수 구하기.
  
  11000111 -> 11111110.
  1. 3번째와 8번째 교환. +1
  2. 4번째 1로 바꿈 +1
  3. 5번째 1로 바꿈 +1
  4. 정답 3.

  풀이.
  목표 문자열을 한 배열에 저장해놓고.
  시작배열의 요소 1개씩 비교하면서 다르다면 반복문을 통해 다른 것과 교환한다.
  끝났으면 또 다음 요소를 1개씩 비교하면서 나간다. 만약 또 다르다면 
*/

// console.log()
function solution(data) {
    let tmp = "";
    let cnt = 0;
    let found = false;
    let datas = data.split(" ");
    // datas = datas.map(el => {
    //   return el.split('')
    // });
    let base = datas[0].split("");
    let goal = datas[1].split("");
  
    for (let i = 0; i < base.length; i++) {
      if (base[i] === goal[i]) {
        // 동일할 때
        continue;
      } else {
        // 다를 때
        console.log(`다릅니다! 이번에 다른 것은 ${base[i]}, ${goal[i]} 입니다.`);
        for (let j = i + 1; j < base.length; j++) {
          console.log(`이번에 알아볼 것은 ${base[j]} 와 ${goal[j]} 입니다!!`);
          if (base[j] !== goal[j] && base[i] !== base[j]) {
            tmp = base[i];
            base[i] = base[j];
            base[j] = tmp;
            cnt += 1;
            found = true;
            console.log(`${i}자리와 ${j}자리 교체합니다.`);
            console.log(`결과는 ${base}, ${goal} 입니다.`);
            break;
          }
        }
        if (!found) {
          base[i] === "0" ? (base[i] = "1") : (base[i] = "0");
          cnt += 1;
          console.log("답이 없습니다. 번호 바꿉니다.");
        }
      }
    }
    return cnt;
  }
  
  console.log(solution("11011 10010"));

'Algorithm > plz Remember' 카테고리의 다른 글

앞으로의 계획 정리  (0) 2021.06.27
모든 알고리즘 계산은 velog에서 한다.  (0) 2021.05.17
계획  (0) 2021.05.17

댓글