22.9.26

커피 내리는 그냥 사람·2022년 9월 26일
0

항해99

목록 보기
16/108

챌린지 29~40

29. 3진법 뒤집기

약간 소 뒷걸음질 치다가 쥐 잡은 격으로 풀었다. parseInt가 잘 이해가 안 되므로 복습이 필요.

function solution(n) {
    var answer = 0;
    let threeJ = n.toString(3)
    // 3진법으로 변경
    let tempArr = threeJ.split("").reverse()
    // 문제 변경 사항처럼 reveser()이용해서 뒤집음
    let tempNumber = tempArr.join("")
    // 이후 str 값이지만 합침, "0021"이렇게
    answer = Number.parseInt(tempNumber, 3)
    // 다시 Number로 교체. 3진법이므로 parseInt에 3 집어 넣음
    return answer;
}

parseInt 설명 블로그

아마 Number가 10진법으로 바꿔준 역할을 한게 아닐까 합리적인 고민을 하며 일단 마친다..
-> 다시 알아보니 parseInt가 10진법으로 바꿔준거였음.

30. 최소직사각형 : 패스

행렬처럼 2차원 배열 나오면 쥐약이다. 일단 패스.

31. 같은 숫자는 싫어

사고를 반대로 했더니 풀렸다. 연속된 숫자가 같으면 빼주는게 아니라 오히려 다음숫자와 같지 않다면 새 배열에 집어 넣어준다고 풀었더니 금방 풀렸다.

function solution(arr)
{
    var answer = [];
    for(let i=0; i < arr.length; i++){
        if(arr[i] != arr[i+1]){
            answer.push(arr[i])
        }
        }
    
    
    return answer;
}

32. 두 개 뽑아서 더하기

reduce, random, array 복사 등 별의 별걸 다 해봤다. 2시간 반 동안 안 풀려서 답을 찾아봤다.

답을 봐도 사실 조금 이해가 안 되었다. 그래서 여러번 읽어서 이 정도 이해한 것을 담았다. 일단 세모표시 해야겠다.

function solution(numbers) {
    var answer = [];
    
        for (let i = 0; i < numbers.length-1; i++){
            for(let j = i +1; j < numbers.length; j++){
                // 이중 for문으로 토너먼트 형식으로 만듦
                let temp = numbers[i] + numbers[j]
                // 두 수의 합을 temp에 담음
                if(answer.indexOf(temp) == -1){
                    // 요소가 indexOf로 찾았을 때 없으면 추가해라
                    answer.push(temp)
                    // temp를 answer에 push
                }
            }
            answer.sort((a,b)=>a-b)
            // answer 오름차순 정렬
        }

    return answer;
}

33. 로또의 순위 : 패스

34. 모의고사

해설강의 풀이 그대로 가져왔다. 내가 푼건 아니자만 배우면서 참고해야겠다.

function solution(answers) {
const one = [1, 2, 3, 4, 5]
const two = [2,1,2,3,2,4,2,5]
const three = [3,3,1,1,2,2,4,4,5,5]

// 먼저 찍는 패턴을 파악

const results = [0, 0, 0]
//맞을 때마다 하나씩 올라가게(one, two, three의 수포자들)

for(let i =0; i < answers.length; i++) {
	if(one[i % 5] === answers[i]) results[0]++;
	if(two[i % 8] === answers[i]) results[1]++;
	if(three[i % 10] === answers[i]) results[2]++;
  
  // % 5, 8, 10 : 각 찍는 방식의 대한 length
}

const maxNum = Math.max(...results);

let answer = [];

for (let i = 0; i< results.length; i++){
	if(maxNum === results[i]) {
	answer.push(i + 1)
      
      // 가장 많이 맞춘 사람의 result를 push로 늘려줌
}
}
return answer
}

35. 문자열 내 마음대로 정렬하기

해설이 이해가 안 된다. -> 일단 차근히 읽어보고 답 옮겨적어본다. MDN 보니까 이해 되는거 같기도 하고..

function solution(strings, n) {
    let answer = strings.sort((a, b) => {
      // a, b를 sort 하는데
       if(a[n] > b[n]) return 1;
        if(a[n] < b[n]) return -1;
      // a[n]과 b[n]을 서로 비교
        if(a[n] === b[n]){
          // 같으면 a, b를 비교
            if(a>b) return 1;
            if(a<b) return -1;
            return 0;
          // 완전히 같은 것
        }
    });
    
    return answer;
}

36. 문자열 내림차순으로 배치하기

function solution(s) {
    var answer = '';
    answer = s.split('').sort().reverse().join('')
    // split : str->arr, sort : 정렬(자체적으로 대문자와 소문자별로 정렬), reverse : 배열 내림차순 정렬, join : arr->str
    console.log(answer)
   
    return answer;
}

허무하게 구글링으로 풀렸다. sort기능이 대문자가 자동으로 뒤로 간다는건 몰랐다.

37. 소수 만들기

검색해서 풀다보니 어쩌다 답을 찾아 풀어버렸다. 함수가 나눠진다는 것을 잘 유의하고 풀어보자.

function solution(nums) {
    let answer = 0
    for(let i=0; i < nums.length-2; i++){
        for (let j = i +1; j < nums.length-1; j++){
            for (let k = j +1; k < nums.length; k++){
                if(division(nums[i] + nums[j] + nums[k])===2){
                    answer += 1
                    // 이미 세 수를 더했는데 소수인 2가 나오면 바로 answer 더해줌
                }
                }
            }
        }
    return answer;
}

//함수를 두 개써야 함. 즉 소수를 구하는 함수 하나, 기존 3수를 더하는 함수 하나.

function division(num){
    let count = 0
    for (let i = 0; i <= num; i++){
        if (num % i === 0){
            count += 1
            // 소수 구하는 for문 방식
        }
    }
    return count
}

38. 숫자 문자열과 영단어

kakao 문제였다. 보자마자 끄고 싶었지만 2시간 넘게 고민해봤다.

  • replace, include, object 개념으로 가려 했으나 명쾌하게 풀리는 해답이 있어 여기 공유한다.
function solution(s) {
    var answer = 0;    
    s = s.replace(/zero/g, 0)
    s = s.replace(/one/g, 1)
    s = s.replace(/two/g, 2)
    s = s.replace(/three/g, 3)
    s = s.replace(/four/g, 4)
    s = s.replace(/five/g, 5)
    s = s.replace(/six/g, 6)
    s = s.replace(/seven/g, 7)
    s = s.replace(/eight/g, 8)
    s = s.replace(/nine/g, 9)
    answer = Number(s)
    return answer;
}

참고 블로그

replace를 이렇게 정규식과 반복해서 쓸 수도 있구나...

39. 시저 암호 : 패스

40. 신규 아이디 추천 : 패스

전반적으로 못 풀고 넘어간 문제나 답을 참고한 것이 과반이 넘는다. 난이도가 중 정도인데 너무 어렵다.. 문제 조차 이애가 안 되어서 일단 쉬운거 위주로 공부한 다음 다시 도 전해야겠다.

profile
커피 내리고 향 맡는거 좋아해요. 이것 저것 공부합니다.

0개의 댓글