당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩 부트캠프
  • 알고리즘
  • HTML
  • 팀플
  • 배포
  • CSS
  • 팀프로젝트
  • 자바스크립트
  • 프론트엔드
  • javascript
  • 프로그래머스
  • 코드캠프
  • 팀 프로젝트
  • 부트캠프
  • 배열
  • javascrpit
  • 공통 컴포넌트
  • refreshtoken
  • next.js
  • ssg
  • algorithm
  • 리액트
  • graphql
  • 회고
  • React-hook-form
  • emotion
  • react
  • JS
  • 코딩
  • typescript

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니

귀엽고 행복해

프론트엔드✏️/코드캠프

알고리즘 - 수열, 폰켓몬

2022. 6. 10. 09:44
728x90
반응형
function solution(a, b) {
    var answer = 0;
  arr=[];
  if(a===b) return a;

  arr.push(a,b)
  
  console.log(a,b);
  console.log(a+1);

  for(let i = 1; i<b-a; ++i) {
    console.log(a+i)
    arr.push(a+i);
  }
  console.log(arr)
  answer = arr.reduce((acc,cur)=> acc+cur);
    return answer;
}

solution(3,5); //12

이렇게 풀면 3,5 는 가능한데 5,3은 안됨

둘 중에 작은 수에 더해주면 될 것 같음

 

function solution(a, b) {
  var answer = 0;
  arr=[];
  if(a===b) return a;
  arr.push(a,b)
  
  let min = Math.min(a,b);
  let abs = Math.abs(a-b);

  for(let i = 1; i<abs; ++i) {
    arr.push(min+i);
  }
  answer = arr.reduce((acc,cur)=> acc+cur);
    return answer;
}

solution(3,5); // 12

solution(5,3); // 12

풀긴 풀었는데 너무 길고 ... 변수 선언도 많은 것 같은데 줄일 수 없나? 

등차수열 ?  . .

양 끝에 있는 수끼리 더하고 거기에 갯수만큼 곱하고 반으로 나누면 ! 

1부터 몇까진가 쉽게 계산했던 초등학생(?) 아이...ㅎ 였던 어떤 수학자 공식...

근데 코드로 어떻게 쳐야할지?

 

function solution(a, b) {
    var answer = 0;

 //  a+b // 일단 둘이 더하고
  // (a+b) * Math.abs(a-b) // 거기에 갯수를 곱한다
  answer = (a+b) * Math.abs(a-b) * 0.5 // 나누기 2 
    return answer;
}

오>_< 이정도면 완전 만족! 아예 answer에 할당 안 하고 return으로 한 번에 돌려줘도 될 것 같다.

나누기보다 0.5 곱하는 게 c++에선 무리가 덜갔던 걸로 기억해서 0.5 곱으로 했다. 

 

 두 번째 문제~ 

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.
홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다.

  1. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택
  2. 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택
  3. 첫 번째(3번), 네 번째(3번) 폰켓몬을 선택
  4. 두 번째(1번), 세 번째(2번) 폰켓몬을 선택
  5. 두 번째(1번), 네 번째(3번) 폰켓몬을 선택
  6. 세 번째(2번), 네 번째(3번) 폰켓몬을 선택

이때, 첫 번째(3번) 폰켓몬과 네 번째(3번) 폰켓몬을 선택하는 방법은 한 종류(3번 폰켓몬 두 마리)의 폰켓몬만 가질 수 있지만, 다른 방법들은 모두 두 종류의 폰켓몬을 가질 수 있습니다. 따라서 위 예시에서 가질 수 있는 폰켓몬 종류 수의 최댓값은 2가 됩니다.
당신은 최대한 다양한 종류의 폰켓몬을 가지길 원하기 때문에, 최대한 많은 종류의 폰켓몬을 포함해서 N/2마리를 선택하려 합니다. N마리 폰켓몬의 종류 번호가 담긴 배열 nums가 매개변수로 주어질 때, N/2마리의 폰켓몬을 선택하는 방법 중, 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아, 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

 4마리의 포켓몬 중 2마리를 고르는 방법은 4H2 맞나?  4*3/2 = 6

폰켓몬이 2마리 이상일 때만 중복으로 고를 수 있다. 

폰켓몬이 총 6마리 있고, 거기에 마릴이 두 마리, 이브이 한 마리, 에브이 한 마리, 피카츄 한 마리, 꼬부기 한 마리일 때 무조건 마릴을 두 마리 뽑는 경우의 수를 제외하면 폰켓몬을 최대 종류로 가질 수 있다. 그럼 이브이 3, 마릴 2, 피카츄1, 꼬부기1 이렇게 7마리면? 은 N은 짝수! 

이브이 3, 마릴2, 피카츄1 이면 세 마리를 골라야 하고, 여기서 제일 적게 갖는 건 이브이 세 마리, 이브이 두 마리 + 마릴/피카츄, 마릴2 + 이브이/피카츄 임... 많은 종류를 갖는 경우의 수는 세 마리 중 세 마리 다 뽑는 것. 그러면 주어진 포켓몬 수에서 일단 한 마리씩 다 뽑으면 될 것 같다.  ~~~~~~~~~~~라고라고 생각하고 풀고 있었는데 경우의 수 구하는 게 아니라 최대 몇 종류 뽑을 수 있느냐를 구해야하니까 일단 중복부터 거름... 거르고 선택할 수 있는 포켓몬 종류의 수랑 선택할 수 있는 포켓몬 수 둘 중 작은 걸 반환하면 된다. 

 

function solution(nums) {
	let arr = [];
 
  for(let i = 0; i< nums.length; ++i) {
   if(arr.includes(nums[i])===false) {
   	arr.push(nums[i]); // 중복거르기  
  	}  
  }
  
  console.log(arr.length) // 선택가능한 폰켓몬 종류 수
  
  console.log(nums.length/2) // 선택가능한 폰켓몬 수
  
  return arr.length > nums.length/2 ? nums.length/2 : arr.length; // 둘 중 작은 걸 return 
  
}

 

// 다른 사람 풀이
function solution(nums) {
  const max = nums.length / 2;
  const arr = [...new Set(nums)];

  return arr.length > max ? max : arr.length
}

Set...? Set이 뭔데?? 

Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.

 

따란 중복을 걸러주는 애였고 분명 Set에 대해 포스팅한 적이 있던 것 같다.... ㅠ ㅠㅠ ㅠㅠ 

중복만 나오면 한없이 약해지는 나 ....... 

for문 몇 줄이 저렇게 줄어들 수 있다! 

재밌당 ㅎㅎ 포문최고..ㅠ.

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

220611 프론트엔드 부트캠프 32일차 : 주말,  (0) 2022.06.12
220610 프론트엔드 부트캠프 31일차 : HOF, react-hook-form, yup  (0) 2022.06.11
220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF  (0) 2022.06.10
알고리즘 - 피보나치 수열,  (0) 2022.06.09
220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰  (0) 2022.06.09
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • 220611 프론트엔드 부트캠프 32일차 : 주말,
    • 220610 프론트엔드 부트캠프 31일차 : HOF, react-hook-form, yup
    • 220609 프론트엔드 부트캠프 30일차 : Diffing, Hydration, closure, HOC/HOF
    • 알고리즘 - 피보나치 수열,
    당근먹는하니
    당근먹는하니

    티스토리툴바