티스토리 뷰

반응형
 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

// 1.
const fs = require('fs');
let dwarfs = fs.readFileSync('/dev/stdin')
  .toString()
  .trim()
  .split('\n')
  .map(i => parseInt(i))
  .sort((a, b) => a - b);

// 2.
const over = (dwarfs.reduce((acc, curr) => acc + curr) - 100);

// 3.
for(let now = 0; now < dwarfs.length; now++) {
  const dwarf = dwarfs[now];
  const who = over - dwarf;
  const where = dwarfs.indexOf(who);

// 4.
  if(where !== -1) {
    dwarfs.splice(now, 1);
    dwarfs.splice((where-1), 1);
    break;
  }
}

// 5.
dwarfs.forEach( dwarf => { console.log(dwarf) } );
  1. 입력 값을 입력받아 모두 정수화한 후 오름차순 정렬한 결과를 dwarfs 배열에 저장
  2. 모든 난쟁이의 키를 합한 후 100을 뺀 값을 over에 저장
    1. 결과에 포함되지 않을 난쟁이 둘을 찾기 위한 값
  3. for 반복문을 통해 dwarfs 배열을 순회하며 다음을 진행
    1. dwarf: 현재 확인 중인 난쟁이의 키
    2. who: 해당 loop에서 색출하고자 하는 난쟁이의 키
    3. where: 목표로 한 난쟁이의 키가 dwarfs 배열에 존재하는지 확인
  4. 목표로 한 난쟁이의 키가 있다면, 현재 난쟁이의 인덱스인 now와 목표 난쟁이의 인덱스인 where를 통해 배열을 잘라낸 후 break
  5. 정리된 난쟁이 배열을 순회하며 키를 출력

 

결과

8312 KB / 120 ms

메모

  • 처음에는 splice(now, 1) 후 splice(where, 1)을 적용하여 문제를 해결하지 못하였음.
  • splice는 새로운 배열을 반환하는 것이 아닌 직접 수정하는 메소드이므로 where의 인덱스 값이 변경되어야 한다는 점을 기억하자.
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함