0916 개발일지

학습내용

대구AI스쿨 프로젝트, 알고리즘

대구 AI스쿨 진행상황

오늘 이슈

  • 6개 조 중 우리 조 사이트만 유료 전환되어 어제부터 만들고 있던 중 기업에서 결제를 취소하여 사이트가 만료되었다. 그로 인해 디자인 모드 진입이 아예 불가능하게 되어 잠시 진행을 멈추고 기업에 사정을 알아보았다.
  • 기업과 1차 소통: 사이트 결제 방식에 대해 기업측의 오해가 있어서 가능하면 6개 조 모두 유료버전으로 제작한 후 1개를 선택하는 방식으로 할 수 있도록 회계담당자와 이야기하기로 하였다.
  • 기업과 2차 소통: 회계담당자와 이야기해보니, 사이트의 목적이나 비용 지출 등을 고려했을 때 6개 모두 유료로 제작하기 어려운 상황이었다.
  • 이미 다른 조들은 무료 버전으로 웹사이트를 만들고 있는 상황이고, 우리 조만 제작을 못하는 상황이라 조원들과 협의 끝에 무료 사이트를 새로 개설해서 재시작하기로 결정하였다. 원래 다른 조들도 유료 전환을 위해 기업과 이야기하고 있는 중이어서 다른 조 팀장분들께 계속 무료로 진행해도 괜찮냐고 확인 후 기업에 연락드렸다.
  • 내일 가능한 팀원들끼리 오프라인으로 모여서 집중적으로 빠르게 만들어보기로 했다.

알고리즘

프로그래머스 2020카카오 인턴십 기출 키패드 누르기

처음 풀이 (실패)

  • 왼손 시작점인 * 자리를 [0,0], 오른손 시작점 #자리를 [2,0]으로 생각하고 상하는 y값, 좌우는 x값을 변동시킨다고 생각하였다.
  • 왼손 오른손 현재 위치 업데이트할때 참조타입 변수를 그냥 left = current 이런식으로 변경하니 가리키는 참조값이 같은 얕은복사가 일어난 것이 문제라고 생각했다.
function solution(numbers, hand) {
  let answer = '';
  let left = [0,0];
  let right = [2,0];
  let current = [0,0];

  // 왼손, 오른손 위치 알아내서 거리 계산 해야 함
  numbers.forEach(element=>{

    if(element%3===1) { // 1, 4, 7
      answer = answer.concat('L');
      left[0] = 0;
      left[1] = 3 - parseInt(element/3);
      left = current;

    } else if (element%3===0 && element!==0) { // 3, 6, 9
      answer = answer.concat('R');
      right[0] = 0;
      right[1] = 3 - parseInt(element/3)+1;
      right = current;

    } else { // 2, 5, 8, 0
      current[0] = 1;
      current[1] = (element===0) ? 0 : 3 - parseInt(element/3);

      let from_left = Math.abs(left[0]-current[0]) + Math.abs(left[1]-current[1]);
      let from_right = Math.abs(right[0]-current[0]) + Math.abs(right[1]-current[1]);

      if(from_left<from_right) {
        answer = answer.concat('L');
        left = current;
      } else if(from_left===from_right){
        if(hand==='left') {
          answer = answer.concat('L');
          left = current;
        } else {
          answer = answer.concat('R');
          right = current;
        }
      } else if (from_left>from_right){
        answer = answer.concat('R');
        right = current;
      }
    }
  });
  return answer;
}

얕은 복사 수정한 풀이(통과)

  • 얕은 복사란 참조타입 데이터를 복사할 때 같은 참조값을 가리키는 방식으로 복사되는 것을 말한다. 하나를 수정하면 같은 참조값 가리키는 다른 변수값도 같이 수정된다. 첫 시도에서 그 부분 때문에 일부 테스트만 통과했던 것 같다.
  • 자바스크립트 깊은 복사 방법 중 slice()를 이용해 배열의 처음부터 끝까지 가져오는 방식을 사용했다.
// left = current;
left = current.slice();

소감

오늘은 대구AI스쿨 프로젝트 관련 이슈를 해결할 것이 많아서 개인 프로젝트 생각을 못했다. 그래도 알고리즘 문제 풀이 시 다른 풀이 보기 전 혼자 문제점을 알아내고 실제로 맞았다는 것이 뿌듯했다.

좋은 웹페이지 즐겨찾기