반응형

알고리즘/문제풀이 20

[BOJ][1300번] K번째 수

안녕하세요 Dibrary입니다. 이번에는 이분탐색을 사용해야 풀 수 있는 문제를 정리해보겠습니다. 저에게 이 문제는 처음에 이해하는데 굉장히 시간이 오래 걸린 문제여서.... 정리를 꼭 해둬야겠다 생각했죠. 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 먼저 문제를 보고 어떤 방법으로 이분탐색을 해야 하는지 감을 잡지 못했습니다. 정확히는 '다른 풀이를 보고서도 이해가 안되었다' 가 더 맞는 표현같네요. 지금은 다른 풀이를 이해한 부분만 정리해보면 아래와 같습니다. 1. 대부분..

[BOJ][15651번] N과 M (3) (백트래킹)

안녕하세요 Dibrary입니다. 이번에 정리할 문제는 백트래킹을 사용해서 풀어야 하는? (백트래킹을 쓰기 좋은) 문제입니다. 개인적으로 백트래킹을 좀 어려워해서 정리해두고자 합니다. 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 이 문제를 보자마자 처음 든 생각은 '사용한 숫자를 또 쓸 수 있다니' 였습니다. 즉, 사용한 숫자와 사용하지 않은 숫자의 구별을 할 필요가 없는 셈이죠. 이 문제를 풀 때 중요한 것은 '길이를 맞추는 것'과 '만들 수 있는 모든 경우'를 구해야 하는 것이죠. 길이 맞추는거야 갯수 ..

[BOJ][3063번] 게시판

안녕하세요 Dibrary입니다. 이번 문제도 시간초과로 꽤나 애먹었던 문제입니다. 3063번: 게시판 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄에 8개의 정수 x1, y1, x2, y2, x3, y3, x4, y4가 주어진다. 상원이 처음 붙인 포스터의 두 꼭짓점의 좌표 (x1, y1), (x2, y2)와 www.acmicpc.net 위 문제는 처음에 어떻게 시도했냐면, x1과 x2범위에서 x3과 x4의 위치를 뺐습니다. 그런방법으로 계산했는데, 이는 크나큰 문제가 있죠. x3이 반드시 x1과 x2보다 크다는 법은 없다. y3도 마찬가지. 그리고 점의 갯수로 따져버리면 원하는 갯수를 셀 수 없다. 이 중에 3번이 가장 골치아팠었습니다. 점 갯수를 따지자니, 전체 갯..

[BOJ][2108번] 통계학

안녕하세요 Dibrary입니다. 이번에는 시간초과때문에 온갖 머리를 쥐어짰던 문제를 정리해보고자 합니다. 어휴 =_=;; (뭐 덕분에 Counter를 알게 되었으니까 다행이죠) 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 문제는 간단합니다. 그저 평균, 중앙값, 최빈값, 범위 만 구하면 됩니다. 그 와중에 혹시라도 시간초과 걸릴까봐 (너무 쉬운거 같은 문제는 꼭 이런게 걸려있곤 해서 말이죠) 미리 아이디어를 좀 짰었습니다. 값 받으면서 미리 정할 수 있는게 뭐 없을까? 최대값, 최소값은 값을 받으면서 미리 확인해 나갈 ..

[BOJ][2018번] 수들의 합 5

안녕하세요 Dibrary입니다. 이번에는 흔히 '투 포인터' 를 써서 풀어야 하는 문제를 정리해보겠습니다. 이번 문제는 단순히 합을 구하는 것입니다. 2018번: 수들의 합 5 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한 www.acmicpc.net 우선 이 문제를 처음 보았을 때, '투 포인터'라는 개념 자체도 몰랐었습니다. 그래서, 가장 먼저 떠오른 생각은 '완전 탐색'이었죠. 문제는, N이 1000만까지 주어질 수 있는데, 그러면 1개씩 전부 끝까지 진행해보고, 2개씩 전부 끝까지 진행해보고, 3개씩 ... N-1개는 안되겠지만 이런..

[BOJ][1516번] 게임개발

안녕하세요 Dibrary입니다. 이번에는 위상정렬을 사용해야 하는 문제를 정리해보겠습니다. 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net 예제 입력을 먼저 확인해보겠습니다. 1번째는 10 -1 즉, 10이라는 시간이 소요되고 1번째 노드로 들어오는 노드(먼저 지어져야 하는 건물)는 없다는 것입니다. 2번째는 10 1 -1 즉, 10이라는 시간이 소요되고 2번째 노드로 들어오는 노드는 1노드만 있다는 것입니다. 3번째는 2번째와 같고, 4번째는 4 3 1 -1인데 4라는 시간이 소요되고 4번째 노드..

[BOJ][12891번] DNA 비밀번호

안녕하세요 Dibrary입니다. 이번에는 백준의 12891번 문제를 통해 '슬라이딩 윈도우'방법을 알아보겠습니다. 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net 위 문제는 사실 모든 경우의 수를 따져보아도 구할 수 있습니다. 문제는, 주어진 문자열의 길이가 100만까지 가능하니까 해당 방법은 쓸 수 없다는 것이죠. 그러면 '모든 경우의 수를 따지지 않아도 될까?' 라는 생각이 떠오르실텐데, 네. 가능합니다. 문제에 이런 조건이 있기 때문이죠, 위 예시를 통해 뽑을 때, 항상 '순서대로 ..

소수 구하는 방법

안녕하세요 Dibrary입니다. 알고리즘을 풀다보면 꼭 마주하는 문제들이 몇 개 있습니다. 소수, 최소공배수, 최대공약수 등등... 중고등학교때는 그저 술술 풀었지만, 코딩으로 하자니 막상 숨이 턱. 막히는 그런 개념들이죠. 그 중에 이번에는 '소수'를 구하는 코드를 정리해보겠습니다. 대표적인 문제로는 아래 문제가 있습니다. 대놓고 소수 구하기 라고 하죠 . 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 우선, 소수란 '자기 자신과 1만을 약수로 갖는 수' 입니다. 예를 들어보죠, 2는 1과 2만을 약수로 가집니다. 소수죠. 3도 1과 3..

[프로그래머스][최소직사각형] - 그리디 문제

안녕하세요 Dibrary 입니다. 이번에는 과거에 풀지 못했던 문제를 다시 도전했는데, 생각외로? 쉽게 풀려서 당황했는데, 왜 그런 느낌을 받았는지를 정리해보고자 합니다. 문제는 '최소 직사각형'이라는 문제인데, 처음에 맞이했을 때의 그 느낌을 아직도 잊을 수 없습니다. (알고리즘을 아예 풀지 못하면서 BOJ에서 A+B 이런거만 건드릴 때 였죠...) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 지금에 와서야 이 문제가 '그리디'고, 문제에 '숨은' 조건을 찾는 것이 중요하다는 것을 알지만, 처음에는 아예 몰랐습니다. 처음에 이 문제를 맞닥뜨리고 느낀 ..

[프로그래머스][없어진 기록찾기] SQL - JOIN

안녕하세요 Dibrary입니다. 이번엔 간단한 JOIN문제인데, 어문데서 시간을 꽤나 허비했던 문제를 정리해보겠습니다. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 JOIN 카테고리에 있는 문제라서 JOIN을 써야 하는 것을 알 수도 있지만, 문제의 내용을 보고도 JOIN을 써야 함을 알 수 있습니다. 이 문제를 보고 제일 먼저 든 생각은, 한쪽엔 있고, 한 쪽엔 없는 것을 '구분' 해야 하고 그 중에 없는 것을 뽑아다가 보여줘야 한다. 입니다. 저는 먼저 문제를 파악해보는데 중점을 뒀었습니다. 예를 들면, 데이터가 몇 개고, 같은 데이터는 ..

반응형