Skip to content

[Bona1122] 25.03.13#54

Merged
JooKangsan merged 5 commits intocodingTestStd:mainfrom
bona1122:bona1122
Mar 20, 2025
Merged

[Bona1122] 25.03.13#54
JooKangsan merged 5 commits intocodingTestStd:mainfrom
bona1122:bona1122

Conversation

@bona1122
Copy link
Collaborator

📌 푼 문제

📝 간단한 풀이 과정

두 개 뽑아서 더하기

// https://school.programmers.co.kr/learn/courses/30/lessons/68644

const solution = numbers => {
  const set = new Set();
  
  for(let i = 0; i < numbers.length; i++){
      for(let j = i + 1; j <numbers.length; j++){
          const num = numbers[i] + numbers[j]
          set.add(num)
      }
  }
  
  return [...set].sort((a, b) => a - b)
}

삼총사

// https://school.programmers.co.kr/learn/courses/30/lessons/131705

const solution = (number) => {
  // 학생은 각자 정수번호가짐
  // 세명의 번호를 더해서 0이 되면 삼총사, 삼총사 만드는 가짓수 구하기
  let result = 0
  const selected = Array(3).fill(0)
  const dfs = (depth, start) => {
    if (depth === 3) {
      let sum = 0
      for (let i of selected) {
        sum += number[i]
      }
      if (sum === 0) result++
      return
    }
    for (let i = start; i < number.length; i++) {
      selected[depth] = i
      dfs(depth + 1, i + 1)
    }
  }
  dfs(0, 0)
  return result
}

가장 큰 수

// https://school.programmers.co.kr/learn/courses/30/lessons/42746

function solution(numbers) {
  const convertString = numbers.map((number) => number.toString())
  const sorted = convertString.sort((a, b) => {
    const AB = Number(a + b)
    const BA = Number(b + a)
    return BA - AB
  })
  const result = sorted.join("")
  return result[0] === "0" ? "0" : result
}

H-Index

// https://school.programmers.co.kr/learn/courses/30/lessons/42747
// 핵심: 논문을 인용 횟수 기준 내림차순으로 정렬한 후,
// 논문의 개수(인덱스+1)가 해당 논문의 인용 횟수보다 작거나 같은 최대 지점을 찾는 것

function solution(citations) {
  citations = citations.sort((a, b) => b - a)

  let i = 0 // 현재까지 확인한 논문의 인덱스
  // i+1 <= citations[i]가 참이면:
  // "i+1번 이상 인용된 논문이 i+1편 이상"이라는 의미
  while (i + 1 <= citations[i]) {
    i++
  }

  return i
}

파일명 정렬

// https://school.programmers.co.kr/learn/courses/30/lessons/17686

function solution(files) {
  const regex = /([^0-9]+)([0-9]+)(.*)/
  files = files.map((file, idx) => ({
    name: file,
    parts: file.match(regex),
    originalIndex: idx,
  }))

  files = files.sort((a, b) => {
    {
      // HEAD 부분 비교 (대소문자 무시)
      const headA = a.parts[1].toLowerCase()
      const headB = b.parts[1].toLowerCase()

      if (headA < headB) return -1
      if (headA > headB) return 1

      // HEAD가 같으면 NUMBER 부분 비교 (숫자로 비교)
      const numberA = Number(a.parts[2])
      const numberB = Number(b.parts[2])

      if (numberA < numberB) return -1
      if (numberA > numberB) return 1

      // HEAD와 NUMBER가 모두 같으면 원래 순서 유지
      return a.originalIndex - b.originalIndex
    }
  })

  return files.map((file) => file.name)
}

@bona1122 bona1122 self-assigned this Mar 19, 2025
@bona1122 bona1122 changed the title [Bona1122] 25.03.06 [Bona1122] 25.03.13 Mar 19, 2025
Copy link
Collaborator

@JooKangsan JooKangsan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

많이 배우고 갑니다! 한주동안 수고하셨습니다!

Comment on lines +5 to +9
const sorted = convertString.sort((a, b) => {
const AB = Number(a + b)
const BA = Number(b + a)
return BA - AB
})
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이부분은 숫자로 변경하지 않고 문자열 비교 후 반환 해도 괜찮을 것 같아요!!

const sorted = convertString.sort((a, b) => (b + a) > (a + b) ? 1 : -1)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 잘 보았습니다!
selected 배열 대신 선택된 값의 누적합을 실시간으로 처리하고, sum을 매개변수로 넘긴 뒤 depth가 3일 때만 비교하는 방식은 어떨까요?
이렇게 하면 인덱스를 배열에 저장하고 다시 값을 꺼내는 과정을 생략할 수 있고, 매번 for문으로 합을 구하지 않아도 돼요!

const solution = (number) => {
  let result = 0
  const dfs = (depth, start, sum) => {
    if (depth === 3) {
      if (sum === 0) result++
      return
    }
    for (let i = start; i < number.length; i++) {
      dfs(depth + 1, i + 1, sum + number[i])
    }
  }

  dfs(0, 0, 0)
  return result
}

@JooKangsan JooKangsan merged commit 4ab4edc into codingTestStd:main Mar 20, 2025
0 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants