인프런 커뮤니티 질문&답변

sdcpdpd1님의 프로필 이미지
sdcpdpd1

작성한 질문수

[하루 10분|Web Project] HTML/JS/CSS로 나만의 심리테스트 사이트 만들기

타입이 동점일 때 처리 방법

작성

·

243

1

안녕하세요, 우선 좋은 강의 감사합니다.

다름이 아니라 결과 알고리즘에서 만약 두가지 타입이 동점(ex. 호랑이 6, 쥐 6)일 때, 앞쪽에 있는 타입을 출력시키는 형태잖아요?

그런데 동점일 때 아예 다른 타입의 결과(ex. 고양이)를 출력시키고 싶습니다. 이럴 경우 어떤 식으로 코드를 좀 바꿔주면 될지 궁금합니다. 

function calResult(){

  console.log(select);

  var result = select.indexOf(Math.max(...select));

  return result;

}

이 부분에서 if문을 넣어준다던가... 어떻게 해야 할지 갈피가 안잡혀서 질문 드립니다.

답변 3

4

판다코딩님의 프로필 이미지
판다코딩
지식공유자

const endPoint = 12;
const select = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
const samePoint = 12;

function calResult(){
  let sortArray = select.sort((a,b) => {
    if(a > b){
      return -1;
    }if(a < b){
      return 1;
    }
    return 0;
  })
  if(sortArray[0] === sortArray[1]){
    return samePoint;
  } else {
    var result = select.indexOf(Math.max(...select));
    return result;
  }
}

이렇게 코딩해볼 수 있을 것 같습니다.

조금 더 생각해보면 보다 효율적이고 간결하게 코딩할 수 있을 것 같은데...!

지금 당장 떠올릴 수 있는 방법 중 가장 빠른 방법은 이 방법인 것 같습니다.

먼저, 12개의 type이 있다고 가정할 때 사용하게 될 배열의 인덱스의 최대값은 11입니다.

따라서 samePoint라는 변수를 만들고 그 변수에 12를 저장함으로써,

같은 값이 나왔을 때 12를 리턴하고자 합니다.

sortArray라는 배열은 select배열을 오름차순으로 정렬하여 생성합니다.

그리고 sortArray의 `0`번째 인덱스의 값과 `1`번째 인덱스 값이 같다면 동점이 발생한 것입니다.

따라서 사전에 정의해두었던 samePoint를 리턴하고,

그렇지 않은 경우에는 기존과 동일한 코드를 사용하면 될 것 같습니다.

1

저도 궁금하네요 동점이면 결과 페이지에 둘 다 써넣어보고 싶네요

판다코딩님의 프로필 이미지
판다코딩
지식공유자

동점이면 둘 다 페이지에 출력하는 것은 쉽습니다.

저희가 sorting한 array의 첫번째 인덱스와 두번째 인덱스의 값이 같을 때,

두번째 인덱스를 위한 공간을 createElement로 만들어주어서 할당하면 됩니다.

다만, 이 경우에는 결과를 공유할 때 어떤 페이지를 보여줄 것인지 고민이 필요하거나

공유하는 방식을 바꾸어야 할 것 같습니다.

0

판다코딩님의 프로필 이미지
판다코딩
지식공유자

안녕하세요!
말씀해주신 사안만으로는 어떤 퍼포먼스를 원하시는지 파악하기 어렵습니다.

만약 동점이 발생한다면,

동점인 두 항목을 제외하고 다른 결과를 보여주시길 원하시는 건가요?

그렇다면, 어떤 항목이 동점일 때 어떤 항목을 보여줄 것인지 미리 정해야 할 것 같습니다.

sdcpdpd1님의 프로필 이미지
sdcpdpd1
질문자

안녕하세요!

호랑이와 쥐가 동점일 때는 쥐가 앞쪽(쥐는 0번째 인덱스. 호랑이는 2번째 인덱스)에 있으니 쥐를 결과로 리턴시켜주는 형태인데,

이 때 쥐도 호랑이도 아니고 아예 다른 타입의 결과인 고양이(cat,  12번째 인덱스에 새로 만든 결과)를 보여주길 원합니다!

판다코딩님의 프로필 이미지
판다코딩
지식공유자

한 가지만 더 여쭤봐야 될 것 같습니다.

동점일 때, 타입의 조합마다 새로운 타입을 보여줘야 하는 경우일까요?

아니면 동점인 결과가 나왔을 때만 보여줄 항목이 하나로 정해져있는 걸까요?

sdcpdpd1님의 프로필 이미지
sdcpdpd1
질문자

후자입니다!

sdcpdpd1님의 프로필 이미지
sdcpdpd1

작성한 질문수

질문하기