분류 전체보기(196)
-
브루트 포스 - 멘토링
문제 현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만드려 한다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것이다.. 선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정한다. 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 한다.. M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하라. 입력 설명 M개의 줄에 걸쳐 수학테스트 결과가 학생번호로 주어진다. 학생번호가 제일 앞에서부터 1등, 2등, ...N등 순으로 표현된다. 만약 N=4이고, 테스트 결과가 3 4 1 ..
2024.01.12 -
2차원 배열 - 봉우리
행렬의 요소를 순회하면서 상하좌우값을 비교해 이들보다 크다면 봉우리가 되는 문제이다. 나의 풀이 function solution(arr) { let result = 0; const n = arr.length; const formatted = arr.map((list) => [0, ...list, 0]); formatted.push(Array.from({ length: n + 2 }).fill(0)); formatted.unshift(Array.from({ length: n + 2 }).fill(0)); for (let i = 1; i < formatted.length - 1; i += 1) { for (let j = 1; j < formatted.length - 1; j += 1) { if ( forma..
2024.01.11 -
2차원 배열 - 격자판 최대합
격자판 각 행의 합, 각 열의 합, 두 대각선의 합 중에 가장 최대값을 구하는 문제이다. 문제에 나와있는대로 각 행의 합 중에 최댓값을 구하고, 각 열의 값들이 모아있는 배열을 만든 후 최댓값을 구하고 각각의 대각선의 합을 구한 뒤에 가장 큰 값을 구해주면 된다. 정답은 맞추었지만 행렬의 개념에 오류가 있다는 것을 깨달았다. 0 1 2 3 4 1 2 3 4 네모 안에 있는 숫자는 인덱스이다. 2차원 배열로 행렬을 표현할 때 arr[행의 인덱스][열의 인덱스]로 표현되어진다. 10 13 10 12 15 12 39 30 23 11 11 25 50 53 15 19 27 29 37 27 19 13 30 13 19 예를 들어 다음과 같이 요소가 저장되어 있을때, arr[2][3]은 53이 된다. 2번째 행의 3번..
2024.01.11 -
브루트 포스 - 블랙잭
백준 2798 문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 ..
2024.01.10 -
점근적 표기 1
백준 24313번 문제 오늘도 서준이는 점근적 표기 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. 알고리즘의 소요 시간을 나타내는 O-표기법(빅-오)을 다음과 같이 정의하자. O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다} 이 정의는 실제 O-표기법(https://en.wikipedia.org/wiki/Big_O_notation)과 다를 수 있다. 함수 f(n) = a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n) 정의를 만족하는지 알아보자. 입력 첫째 줄에 함수 f(n)을 나타내는 정수 a1, a0가 주어진다. (0 ≤ |ai| ≤ 100) 다음 줄에 양의 정수 c가..
2024.01.10 -
시간 복잡도
백준 문제를 기반으로 시간 복잡도에 대한 개념을 정리해보자. 빅오 표기법 실행 시간을 표기할 때 빅오 표기법을 주로 사용한다. 수행 시간을 점근적 표기법 즉, n이 무한대로 늘어날 때 필요한 부분만 남기는 표기법으로 표현한 것이다. 상향선을 기준으로 표기하는 것으로 같은 말로 Worst case를 기준으로 실행 시간을 표현한 것이다. 다양한 표기법들이 존재하지만 주로 빅오 표기법을 사용하는 이유는 소프트웨어가 최악의 상황에서도 수행될 수 있는지를 확인할 수 있기 때문이다. 백준 24262번 MenOfPassion(A[], n) { i = ⌊n / 2⌋; return A[i]; # 코드1 } 우선 이 함수를 실행했을 때 실행 시간이 어느 정도일지를 표현하고 싶다. 실행 시간이란 함수/알고리즘 수행에 필요한..
2024.01.10