분류 전체보기 50

프로그래머스_H-index

자바스크립트 정렬만 할 줄 알면 쉽게 풀수 있는 문제이다. //오름 차순정렬 numbers.sort((a, b)=> { return a-b; }); // 내림 차순 정렬 numbers.sort((a, b)=> { return b-a; }); h-index 값을 0으로 두고 정렬된 배열 뒷부분부터 순회하면서 배열의 값이 h-index 값보다 크면 h-index 값을 1증가시키고 그이외에 경우에는 값을 그대로 두면 된다. 예를 들어 1 1 2 4 5 같은 경우(h-index = 0) step1 : 1 1 2 4 5 5 > 0(h-index) 1(h-index++) step2 : 1 1 2 4 5 4 > 1(h-index) 2(h-index++) step3 : 1 1 2 4 5 2 > 2(h-index) 2(..

프로그래머스 2020.05.07

프로그래머스_탑

https://programmers.co.kr/learn/courses/30/lessons/42588 map 함수를 이용하면 쉽게 풀수있다. map(a, b) 첫번째 인자로는 배열의값, 두번째인자는 배열의 인덱스이다. 왼쪽편에 자기보다 높은 탑을 발견하면 높은탑에 해당하는 인덱스 + 1 을해주고 높은 탑을 발견하지 못하면 0을 리턴하면된다. function solution(number){ return number.map((v, i) => { while(i){ i--; if(number[i] > v){ return i + 1; } } return 0; }) }

프로그래머스 2020.05.07

백준_17472_다리만들기

문제를 요약하면 N,M 크기의 격자판위에 1로 모인곳이 섬이고 모든 섬들을 연결하는 다리길이의 최솟값을 구하는 문제이다 조건 ! 1. 1번과 2 번이 연결되있고 2번과 3번이 연결되어있으면 1번과 3번도 연결되어있는것이다 2. 다리의 길이는 2이상이다. 3. 다리는 섬과 인접하게만 이어질수있다 (백준 문제예시에 그림으로 친절하게 알려준다) 풀이 ! 1. 크루스칼 알고리즘을 사용하면 쉽게 풀수있다. 크루스칼 알고리즘은 최소신장트리 에관한내용인데 아래 동빈나님 블로그에 가면 동영상강의와 함께 친절하게 내용설명을 해주신다. https://m.blog.naver.com/PostView.nhn?blogId=ndb796&logNo=221230994142&proxyReferer=https:%2F%2Fwww.googl..

백준_17135_캐슬디펜스

출처 https://www.acmicpc.net/problem/17135 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 궁수에 위치를 선정해주고 선정이 된 이후에 시물레이션을 통해 적을 최대로 처지 할 수 있는 수의 최댓값을 구하는 문제이다. 일단 배열에 세로 열 부분에 궁수를 배치 할 수 있는데 최대 세명까지 배치할 수 있으므로 백트래킹으로 궁수에 위치를 먼저 선점해야 한다. 3명이 된이후에는 원래의 배열을 복사하여 시물레이션을 진행한다. 원래의 배열을 복사하는 이유는 궁수의 배치가 달라질 때마다 시뮬레이션을 진행해야..

백준_17070_파이프옮기기1

출처 : https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 번호이고, 행과 열의 번호는 1부터 시작한다. 각각의 칸은 빈 칸이거나 벽이다. 오늘은 집 수리를 위해서 파이프 하나를 옮기려고 한다. 파이프는 아래와 같은 형태이고, 2개의 연속된 칸을 차지하는 크기이다. 파이프는 회전시킬 수 있으며, 아래와 같이 www.acmicpc.net 문제를 읽어보면 파이프를 옮겨 왼쪽 아래 끝부분에 도착하는 경수의 수를 모두 구하는 문제이다. 파이프가 가질수 있는..

백준_15683_감시

문제를 보면 Cctv 5개가 있고 (1 ~ 5) 번 벽은 6으로 표현된다 먼저 문제를 이해해보면 1,3,4 번 Cctv는 총 4 가지 방법으로 감시할 수 있고 2 번은 2가지, 5 번은 1가지 밖에없다. 그럼 씨씨 티브이가 주어졌을 때 감시할 수 있는 모든 경우의 수를 구하면 된다. 예를 들어 2번과 3번과 5번이 주어졌다고 가정하자. 모든 경우를 각각 구한 후 감시할 수 있는 영역이 최대인 경우를 구하면 된다.(감시하지 못하는 영역의 최솟값을 구하는 문제) 2번은 (왼쪽, 오른쪽), (위, 아래) 두 가지! 3번은 4가지! 5번은 1가지! 나는 모든 경우를 탐색하기 위해서 재귀를 이용하였다. (숫자)는 Cctv 가 가리킬 수 있는 방향의 가짓수 중 하나라고 생각하고 설명하였다. 그럼 2번 Cctv 가 ..

SW 역량 테스트 2020.03.07

백준_16637_괄호 추가하기

이번 문제는 수 사이에 괄호를 적절히 추가하여 식의 결과 값을 최대로 만드는 것이다. 주의해야 할 점은 괄호 안에 괄호를 추가할 수 없다는 것이다 예를 들어 (3 * 2) + (2 + 4 )는 되지만 (3 * 5 - ( 2 + 7 )) 과 같은 경우는 + 연산자가 총 두 쌍의 괄호로 감싸 져 있기 때문에 안된다. 여기서 알 수 있는 점이 있다! 한 연산자가 괄호로 감싸이면 다음 연산자는 절대로 괄호가 씔 수 없다. 어떠한 연산자에 괄호가 씌면 양옆 연산자는 괄호가 씔 수 없다. 예를 들어보자 (문제 조건에서 수식은 괄호를 제외하고는 왼쪽에서 오른쪽으로 진행된다.) 2 * 4 + 4 - 2라는 식이 있을 때 ( 1 ) 현재 식에서 괄호를 씌우고 다음으로 진행하는 경우 (2 * 4) + 4 - 2 => 8 ..

백준_14501_퇴사

나는 이문제를 다이나믹 프로그래밍으로 접근해서 풀었다. dfs 풀이법도 있으니까 나중에 찾아서 공부해야겠다. 1. 일단 첫 번째 나는 dp로 풀기로 결정했기 때문에 dp 배열을 만들어준 후 각 인덱스(0을 제외한) 에 해당하는 배열 값(dp [i])을 i 일에 벌 수 있는 최대 수익이라고 놓았다. (d [i] => i 일에 벌 수 있는 최대 수익) 점화식은 간단하게 구할 수 있다. 예를 들어 3일째 벌 수 있는 최댓값(dp [3]) 를 구하기 위해서는 (1 일대에 벌 수 있는 최대값 + 3일째벌수있는 값), (2 일째에 벌수있는 최대값 + 3일째 벌수있는 값) 중 가장 큰 값을 구하면 된다 dp[i] = Math.max(dp[i], dp[j] + p[i]); 2. 하지만 생각해야 할 조건이 2 가지 정도..

SW 역량 테스트 2020.03.04

백준_13458_시험감독

출처: https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net 문제를 읽어 보면 그리디 문제라는 것을 알 수 있다.!! N 개의 시험장과 각 시험장에 응시하는 인원이 주어진다. 그다음에는 총감독관과 부감독관이 감시할 수 있는 인원이 주어진다 문제 조건에서 각 방마다 총감독관은 1명이 있어야 하고 부감독관은 여러 명 있어도 된다! !! 주의할 점은 총 감독할 수 있는 인원의 최솟값이 너무 커질 수..

SW 역량 테스트 2020.03.04

백준_14899_스타트와링크

스타트와 링크 문제를 정리 해보자면 1. N 명의 팀원을 두팀으로 나눈다(문제에선 N 이 짝수로만 주어진다.) 2. 두팀(A 팀 ,B 팀) 으로 나누어 졌을때 각팀원들의 능력치의 합을 구해 A팀의 능력치의 합 과 B팀의 능력치의 합의 차이를 최소화 하는것이다. 3. 위 2번에서 헷갈리지 말아야하는 부분은 예를들어 1번과 2번이팀이고 3번과 4번이 팀이라고 가정하자 1, 2 번이 속한 팀의 능력치의 합 : 1번이 2번을 만나 능력치 10 을 얻었다고 가정하자 (위배열로 예를 들면 arr[1][2] ) 2 번은 1번을 만나 능력치 8 을 얻었다고 가정하자 (마찬가지로 arr[2][1]) 즉 1, 2 번이 속한 팀원들의 능력치의 합은 10 (arr[1][2]) + 8 (arr[2][1]) = 18 이다. 4...

SW 역량 테스트 2020.03.04