문제 입출력 풀이 아스키코드값을 이용해서 푸는 문제입니다. 아스키코드표를 보면 숫자 0부터 9까지가 48부터 57까지인것을 알 수 있습니다. 예를들어 문자로 숫자 5를 입력받으면 53가 되므로 48('0')을 빼주면 원하는 값을 받을수 있습니다. 코드 >http
자연수 N이 입력되면 1부터 N까지의 각 숫자들의 약수의 개수를 출력하는 프로그램을 작성하세요. 만약 N이 8이 입력된다면 1(1개), 2(2개), 3(2개), 4(3개), 5(2개), 6(4개), 7(2개), 8(4개) 와 같이 각 숫자의 약수의 개수가 구해집니다.출
2차원 배열을 입력받고 하얀칸에 말이 몇개 있는지 찾는 문제이다. 체스의 가장 왼쪽(0,0)이 흰색이며 체스판은 번갈아가면서 흰색, 검은색이 칠해져있다. 따라서 체스판의 가로와 세로의 합(i+j)이 짝수면 흰색, 홀수면 검은색임을 알 수 있다.위 코드로 정상적으로 제출
자연수 N이 입력되면 1부터 N까지의 자연수를 종이에 적을 때 각 숫자는 몇 개 쓰였을까요?예를 들어 1부터 15까지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5으로총 21개가 쓰였음을 알 수 있습니다
N자리의 자연수가 입력되면 입력된 자연수의 자릿수 중 가장 많이 사용된 숫자를 출력하는 프로그램을 작성하세요.예를 들어 1230565625라는 자연수가 입력되면 5가 3번 상용되어 가장 많이 사용된 숫자입니다. 답이 여러 개일 경우 그 중 가장 큰 수를 출력하세요.▣
algorithm헤더의 sort()함수를 사용하면 된다.
정말 단순해 보이는 문제지만 생각해볼게 많은 문제이다.첫째로 두 정수 A와 B가 1부터 10의 15승까지의 범위를 가진다.따라서 int형으로는 두 정수를 담을수가 없다. int형은 최대 대략 21억까지 담을 수 있으며 이를 초과하면 overflow가 발생하게 된다. 따
3개의 정수를 입력받고 그 곱의 값에 숫자가 각각 몇번 사용됐는지 알아보는 문제이다.일단 3개의 정수가 100보다 크고 1000보다 작으므로 그 곱은 7~10자리 범위의 숫자이다.각 자리수를 구하는 방법은 다음과 같다.처음 값에서 10을 나눈 나머지가 가장 마지막 자리
c++의 입출력 방식인 cin/cout은 속도가 느린 방식이다. 이를 사용하다보면 시간초과가 발생할 수 있다. 따라서 이를 사용하기 위해서는 cin.tie(NULL)과 sync_with_stdio(false)를 사용해줘야한다. 그러나 이를 사용하게 된다면 c의 입출력
9명의 난쟁이중 옳바른 7명의 난쟁이를 찾는 문제이다. 7명의 난쟁이의 합이 100이므로 9명이 난쟁이의 합을 구한뒤 이중 반복문을 통해 두명의 난쟁이를 빼보면서 100이 맞는 경우를 찾는 완전 탐색으로 해결하면 된다.이중 반복문은 flag 변수를 통해 탈출하였다.
입력받은 두개의 문자열을 크기가 26인 각각의 배열에 넣은 뒤에 일치하는지 여부 확인하며 문제를 해결하면 된다.str1i-97을 통해 각 알파벳의 위치를 0부터 25까지로 나타낼 수 있다.두개의 배열은 첫번째 반복문이 돌때마다 초기화를 시켜줘야한다. 이는 반복문 안에
이중배열로 문제를 해결할 수 있다.최대 인원수보다 작거나 같은 경우에는 모두 한방에 들어갈 수 있다.최대 인원수보다 큰 경우에는 같은 성별 같은 나이의 학생수를 최대 인원수로 나눈 나머지가 0인 경우에는 이를 나눈 나머지값만 방 개수에 더하면 되고0이 아닌 경우에는 이
c++ STL의 sort 함수는 시간복잡도가 O(nlongn)이다. 이를 사용해서 문제를 해결할 수 있다.2751번은 sort 함수는 default가 오름차순이므로 sort 함수를 사용하면 된다.11931번은 내림차순을 만들어주는 함수를 만들어서 이를 sort 함수의
입력받은 문자열에서 숫자를 찾고 이 숫자들의 합을 구하는 문제이다. 단어의 길이가 1부터 5백만 사이이므로 크기가 50000001인 str을 전역변수로 정의한다.또한 int형의 범위를 초과하므로 결과값을 구하는데 필요한 sum과 결과값을 나타내는 res변수의 자료형은
이중배열로 문제를 풀면 된다. 출력할때 NULL이 아닌 경우에만 출력하는 조건문을 걸어주면 쉽게 문제를 해결할 수 있다.
문제 입출력 풀이 한 세트에 0부터 9까지의 숫자가 있다. 6과 9는 서로 뒤집어서 이용할 수 있으므로 한세트만으로 66이나 99같은 번호를 사용할 수 있다. 크기가 10인 배열에 ++를 하면서 가장 큰 값이 방 번호를 꾸미는데 필요한 세트의 갯수가 된다. 숫자가
단어 하나 하나를 거꾸로 출력하는 문제이다. 각 공백들의 위치를 beg, end 변수에 넣은후에 단어들을 거꾸로 출력하면 된다.beg의 처음 값에는 0이, end의 처음 값는 첫번째 공백 위치가 들어간다.다음 beg 값에는 end값이, 다음 end 값에는 두번째 공백
단순하게 O(n^2)으로 풀었다가 시간초과가 발생하였다. 다시 문제를 읽어보니 배열의 크기가 최대 10만이다. n이 1000이상일 경우에는 O(n^2)을 사용할시 시간초과가 발생한다. 따라서 이진탐색( O(logN) )으로 풀어야 하는 문제이다. 이진탐색으로 문제를 풀
STL list로 문제를 해결할 수 있다. list::iterator t으로 커서의 위치를 문자열의 맨 끝으로 받은다음에P는 입력할 문자를 입력받는 것이므로 insertL은 커서를 왼쪽으로 한 칸 옮기는 것이므로 t--D는 커서를 오른쪽으로 한 칸 옮기는 것이므로 t
문제 입출력 풀이 STL list로 문제를 해결하였다. 1부터 N까지의 숫자랑 K번째 사람을 제거하기 위한 숫자 K가 주어지며 1부터 N번의 사람이 원을 이루면서 앉아있다. 시작번호가 1, 끝번호가 7이며 1부터 7까지의 사람중에 3번째 사람이 제거되었다. //
문제 입출력 풀이 STL list로 문제를 풀었다. 1) '' 일때는 커서가 맨 뒤가 아닌 경우에 오른쪽으로 한칸 이동 3) '-' 일때는 커서가 맨 앞이 아닌 경우에 커서 왼쪽에 있는 글자를 지움. 커서가 가르키는 글자를 지우는게 아니므로 커서를 왼쪽으로 한칸
문제 입출력 풀이 STL stack을 이용한 풀이와 직접 push, pop, top, size, empty를 구현한 풀이 두가지 방법으로 문제를 풀었다. 코드 STL stack 직접 구현
STL stack을 통해 문제를 풀었다.'(' 이 나오면 push를 한다.'\[' 이 나오면 push를 한다.')' 일때 stack이 공백이 아니면서 top이 '(' 라면 pop을 하고 아니라면 push를 한다.']' 일때 stack이 공백이 아니면서 top이 '\['
문제 입출력 풀이 ') 을 입력받았을때 이것이 레이저를 나타내는지 막대기가 끝나는지를 구분하면 문제를 풀 수 있다. ')' 이 나올때 앞의 값이 '(' 라면 레이저이므로 stack의 사이즈만큼 결과값에 더한다. 앞의 값이 ')' 라면 막대기가 끝나는 것이므로 1을
문제 입출력 풀이 앞/뒤 둘다 push pop이 가능해야 하므로 STL deque를 이용해서 풀었다. 뽑아야 하는 원소가 front를 기준으로 왼쪽/오른쪽 어디가 가까운지만 파악하면 풀 수 있다. 코드 느낀점 2시간정도 낑낑대고 문제를 푼거 같다. deque를
STL stack을 이용해서 문제를 풀었다. stack이 empty 일때는 0을 출력한다. 위치를 저장하기 위한 인덱스와 입력받은 값을 push 한다.top과 입력받은 값을 비교해서 top < 입력받은 값이면 pop을 하며 stack이 empty가 되어서 0이 출
문제 입출력 풀이 deque를 사용하였으며 각 정수의 인덱스까지 저장하기 위해 STL pair를 사용하였다. deque의 맨 앞의 인덱스를 출력하고 이를 삭제한다. 원소가 양수이면 맨 앞의 값을 맨 뒤로 삽입하였고 음수이면 맨 뒤의 값을 맨 앞으로 삽입한다. de
문제 입출력 풀이 나이순으로 정렬하고 나이가 같다면 입력받은 순으로 정렬하는 문제이다. STL sort는 원소의 순서를 보장하지 않는다. stable_sort는 일반적으로 sort보다 느리며 원소의 순서를 보장하는 정렬이다. 따라서 stable_sort를 통해 문제
문제 입출력 풀이 BFS를 이용하는 문제이다. 출력값으로 그림의 개수와 가장 큰 그림의 크기를 출력해야 한다. 따라서 BFS의 시작점이 한개가 아니라 여러개인 문제이다. 시작점은 이중 for문을 돌면서 방문한적이 없거나 색칠이 된 부분을 찾으면 된다. 시작점을 찾
BOJ 1926번 그림이랑 비슷한 문제이다. 단지의 개수와 각 단지내의 집의 수를 오름차순으로 구하는 문제이다. BFS를 이용해서 풀 수 있으며 입력을 문자열 형식으로 받는것만 주의하면 쉽게 해결할 수 있다.
문제 입출력 풀이 배열의 왼쪽 상단부터 오른쪽 하단까지의 거리를 구하는 문제이며 한개의 시작지점을 가진 BFS 문제이다. 문자열 형식으로 배열을 받는것을 생각하고 문제를 풀어야 한다. 미로를 의미하는 board는 char형이나 string형으로, 각 위치로부터 시
문제 입출력 풀이 상자 안에는 익은 토마토와 익지 않은 토마토가 존재한다. 익은 토마토는 하루가 지나면 상하좌우에 존재하는 익지 않은 토마토에 영향을 줘서 익은 상태가 된다. 상자에 익은 토마토와 익지 않은 토마토가 주어졌을때 모든 토마토가 익은 상태가 되는 최소
문제 입출력 풀이 모눈종이에 k 개의 직사각형을 그리고 이 직사각형으로 분리되는 영역이 몇개인지를 구하는 문제이다. 모눈종이의 크기를 나타내는 m, n 직사각형을 개수를 나타내는 k를 입력받는다. 직사각형의 왼쪽 아래 x, y 좌표값과 오른쪽 위 x, y의 좌표값
문제 입출력 풀이 2178번 미로탐색이랑 비슷한 문제이다. 시작점부터 도착점까지의 거리를 BFS를 이용해서 구할 수 있다. 기존 BFS 문제들은 상하좌우에 접근하였지만 이 문제는 다른 8개의 접근 방법이 있으므로 이것만 주의해주면 쉽게 해결할 수 있다. 코드
적록색약은 빨간색과 초록색을 구분하지 못하는 사람을 의미한다. 먼저 적록색약이 아닌 사람이 본 구역의 개수를 구한 후에 빨간색을 초록색으로 바꾼 후에 적록색약인 사람이 보는 구역의 개수를 출력하면 된다. 첫번째 영역 개수를 출력하고 방문했는지 확인하는 vis 배열만 초
문제 입출력 풀이 문제를 이해하지 못하다가 유튜브에서 설명을 듣고 문제를 이해하였다. https://www.youtube.com/watch?v=byCxMbgzEVM&t=10s&ab_channel=%EC%BD%94%EB%8D%B0%ED%92%80 둘째줄에 4를 입
python을 이용하면 쉽게 해결할 수 있는 문제이다. int 함수를 통해 2진수를 입력받고 이를 10진수로 변환할 수 있다. oct 함수를 통해 10진수를 8진수로 변환할 수 있다. c++로 문제를 풀다가 포기했던 문제이다. 파이썬을 공부하면서 파이썬이 특정 문제에는
문제 입출력 풀이 소수는 1과 자기 자신만으로 나누어지는 수를 의미한다. 이를 반대로 생각하면 어떤 수의 배수는 소수가 될 수 없다. 이를 활용한게 에라토스테네스의 체이다. 에라토스테네스의 체는 자기 자신을 제외한 자신의 배수들을 제거하면서 소수를 찾는 방법이다.
가능한 조합의 개수를 구하는 문제이다. 백트래킹을 이용해서 문제를 풀 수 있으며 백트래킹은 dfs를 기반으로 탐색하는 방식이다. base case는 길이가 m과 같아진다면 배열을 출력시키고 return 시킨다. 일반 case는 방문하지 않은 숫자라면 배열에 값을 넣어주
N과 M (2)https://www.acmicpc.net/problem/15650N과 M (3)https://www.acmicpc.net/problem/15651N과 M (4)https://www.acmicpc.net/problem/15652
N과 M (5)https://www.acmicpc.net/problem/15654N과 M (6)https://www.acmicpc.net/problem/15655N과 M (7)https://www.acmicpc.net/problem/15656
문제 N과 M (9) https://www.acmicpc.net/problem/15663 N과 M (10) https://www.acmicpc.net/problem/15664 N과 M (11) https://www.acmicpc.net/problem/15665 N
문제 입출력 풀이 재귀를 통해 완전탐색을 하면서 6개가 채워지면 탈출을 하는 방식으로 문제를 풀 수 있다. 코드
문제 입출력 풀이 c개의 알파벳 중에 L개의 알파벳을 골라 가능한 수를 출력하는 문제이다. 알파벳은 최소 한개의 모음과 최소 두개의 자음으로 구성되어 있으며 알파벳은 오름차순으로 정렬되어 있다. 오름차순으로 정렬되어 있으므로 시작점이 필요하다. 최소 한개의 모음이
정렬을 이용해서 해결할 수 있는 문제이다. 정수의 범위가 -2^62보다 크거나 같고, 2^62보다는 작으므로 변수타입을 long long형으로 선언한다.max를 1로 초기화 하지 않으면 모든 cnt가 같은 경우에 최소값이 아닌 최대값이 출력되므로 0이 아닌 1로 초기화
문제 입출력 풀이 문자열을 3개의 조건에 따라 정렬하는 문제이다. 두 문자열의 길이가 다를때, 짧은 것 먼저 길이가 같으면, A와 B의 숫자의 합을 비교해서 작은합이 먼저 1, 2번 조건으로도 비교할 수 없으면 사전순으로 코드
임의의 N에 대하여 N!은 1부터 N까지의 곱을 의미한다. 이는 N이 커짐에 따라 급격하게 커진다. 이러한 큰 수를 표현하는 방법으로 소수들의 곱으로 표현하는 방법이 있다. 먼저 소수는 2, 3, 5, 7, 11, 13... 순으로 증가함을 알아야 한다. 예를 들면 8
문제 입출력 풀이 STL sort를 이용해서 해결할 수 있지만 nth_element를 이용해서도 문제를 해결할 수 있다. 배열은 항상 0부터 시작하니 k가 아닌 k-1로 접근하는것만 신경쓰면 쉽게 해결 가능하다. 코드
문제 입출력 풀이 dfs를 이용해서 문제를 해결할 수 있다. 일반적인 dfs 문제는 상하좌우에 접근하지만 이 문제는 대각선까지 접근할 수 있다. 따라서 dx, dy배열에 상하좌우 및 대각선 네 곳의 좌표 총 8개의 좌표를 넣으면 된다. 코드
피보나치 수열은 재귀를 이용해서 풀 수 있으며 재귀의 시간복잡도는 O(2^n)이다. n이 30을 넘어가는 이후부터는 일반 컴퓨터로 출력을 할 수가 없다.따라서 피보나치는 dp를 이용해서 문제를 풀어야 한다. 피보나치 수열의 점화식은 f(n) = f(n-1) + f(n-
문제 입출력 풀이 4를 1, 2, 3의 합으로 나타내는 방법은 1+1+1+1 1+2+1 2+1+1 3+1 1+1+2 2+2 1+3 총 7가지가 있다. 각 방법의 맨 뒤를 보면 +1, +2, +3이 보인다. 이를 제외하고 보면 3을 1,2,3의 합으로 나타내는 1+
문제 입출력 풀이 유클리드 호제법으로 문제를 풀 수 있다. 유클리드 호제법은 두개의 자연수 a, b에서 a를 b로 나눈 나머지 r이라 했을때 GCD(a,b) = GCD(b,r)이고 r이 0이면 그때 b가 최대 공약수라는 원리를 이용한 알고리즘이다. https://
문제 입출력 풀이 2 x n 타일을 1 x 2, 2 x 1 타일로 채울 수 있는 방법의 개수를 구하는 문제이다. 위 그림과 같이 2 x 1 타일로 채울 수 있는 방법의 수는 d[n-1], 1 x 2 타일로 채울 수 있는 방법의 수는 d[n-2]개 이므로 점화식은
dp로 문제를 해결할 수 있으며 i번째 집을 빨강, 초록, 파랑으로 칠했을 때의 최소 비용을 구하는 문제이다. 비용을 저장하기 위한 배열 d1001을 선언한다.di 에는 i번째 집을 빨강색으로 칠할때의 최소비용을 di 에는 i번째 집을 초록색으로 칠할때의 최소비용을 d
문제 입출력 풀이 누적합을 저장하는 d 배열을 만들어서 문제를 해결하였다. 코드
문제 입출력 풀이 dp를 이용해서 문제를 풀 수 있다. i 킬로그램 배달을 해야할때 필요한 봉지의 개수가 d[i] 일때 d[i] = min(d[i-3] + 1, d[i-5] + 1) 이다. 또한 최소값을 구하는 문제이므로 d 배열을 큰 값으로 초기화해줘야 한다.
입력받은 v1, v2배열을 내림차순으로 정렬을 한다.내림차순은 큰 수부터 비교를 하므로 v1의 인덱스가 v2의 인덱스보다 크다면 v2 나머지 인덱스는 다 v1의 인덱스보다 작으므로 더이상 비교하지 않아도 된다.
A 배열을 오름차순으로 정렬하고 m개의 개수를 입력받으면서 이 값들이 A 배열에 존재하는지 확인하는 문제이다. Binary Search를 이용해서 문제를 풀 수 있다.left, right, mid 값을 정한 다음에 mid 값이 찾는 값보다 작다면 right을 mid -
문제 입출력 풀이 upper_bound는 찾고자 하는 값보다 큰 값이 처음 나오는 위치를 반환하는 함수이다. lower_bound는 찾고자 하는 값 이상이 처음 나오는 위치를 반환하는 함수이다. upperbound - lowerbound를 하면 중복된 값이 몇개
문제 입출력 풀이 민규가 N개의 카드를 사려고 한다. 1부터 N까지 카드가 존재하고 p는 각 카드의 값이다. 이를 통해 카드를 구매하는데 필요한 최대값을 구하는 문제이다. 4개의 카드가 있을때 이를 구매하는 최대값은 카드4 카드3+카드1 카드2+카드2 카드1+카드
문제 입출력 풀이 백준 11052 카드 구매하기는 최대값을 구하는 문제였는데 백준 16194 카드 구매하기2는 최소값을 구하는 문제이다. 카드 구매하기를 푼 상태에서 단순하게 max를 min으로 바꾸면 해결이 될까 생각했는데 결과값이 0이 나왔다. 이는 d 배열을
계단수란 인접한 모든 자리수의 차이가 1이 나는 수를 말한다.45656는 모든 인접한 자리수가 1씩 차이가 난다. 따라서 이는 계단수이다.n이 1일때는 1, 2, 3, 4, ... 9까지 총 개의 계단수가 있다. 문제에서 0으로 시작하는 수는 없다고 명시하였으므로 총
dn에서 숫자 L은 이전값보다 크거나 같아야 한다.백준 10844번을 푸는 방식에서 k=j부터 시작하는 3중 for문을 사용하면 이전값보다 크거나 같은 값들의 개수를 구할 수 있다.또한 이전 자리수의 값들을 누적해서 더해줘야 한다. 즉 수의 길이가 2이고 값이 1이라면
이친수는 0으로 시작하지 않으며 1이 두 번 연속 나타나지 않은 수를 말한다.즉 첫번째는 무조건 1이 나와야 하고 1이 연속 두번해서 나타날 수 없으므로 두번째는 0이 나와야한다. 따라서 이친수는 10으로 시작하는것을 알 수 있다.이 성질을 이용해서 이친수를 찾아보면n
그전까지 더해온 값+자신을 더한 값과 자신의 값을 비교해서 최대값을 구하는 방식으로 문제를 풀었다.점화식은 다음과 같다.
문제 입출력 풀이 정삼각형의 변의 길이를 나열하면 1, 1, 1, 2, 2, 3, 4, 5, 7, 9, ... 이다. 여기서 1+1=2, 1+1=2, 1+2=3, 2+2=4, 2+3=5, 3+4=7, 4+5=9, ... 인 규칙을 찾을수있다. d[i]는 두번째 전
문제 입출력 풀이 A가 111이고 B가 1111일때 최대 공약수는 1이며 A가 1111이고 B가 111111일떄 최대 공약수는 111이다. 따라서 유클리드 호제법으로 최대공약수를 구하고 최대공약수만큼 1을 출력해주면 된다. 입력되는 수가 2^63보다 작은 자연수이
방문하지 않은 노드에 대해 DFS를 돌리면서 DFS를 돌린만큼 cnt++를 하면 연결 요소의 개수를 구할 수 있다.
문제 입출력 풀이 순열 그래프 내에서 순열 사이클이 몇개 있는지 구하는 문제이다. DFS로 모든 시작점으로부터 탐색을 한다. vis를 통해 방문했는지 여부를 확인하며 방문하지 않았다면 cnt++를 하며 탐색을 한다. 최종 cnt 값이 순열 사이클의 개수이다. 코
DFS를 통해 탐색을 하면서 1번 컴퓨터를 통해 바이러스가 걸릴 수 있는 컴퓨터를 찾는다.따라서 DFS 함수를 만들고 DFS(1)을 실행시키면 1번 컴퓨터를 통해 바이러스가 걸리는 컴퓨터의 갯수를 구할 수 있다.
문제 입출력 풀이 카드의 개수 n이 최대 100의 크기를 가지므로 n^3을 해도 시간제한에 걸리지 않는다. 알고리즘에서 1초란 연산을 1억번 정도 수행할 수 있다는 것을 의미하며 O(n^3)의 시간복잡도를 가져도 100만으로 1초 안에 수행할 수 있다. 따라서
오큰수는 자신보다 오른쪽에 위치하면서 자신보다 큰 수 중에 가장 왼쪽에 있는 수를 의미한다.오큰수를 찾기 위해서는 자신의 값과 앞으로 나올 수들을 비교해야하는데 이는 스택을 이용하면 된다.vector v에 입력받은 값을 넣는다.vector ans에 각 수에 대한 오큰수
문제 입출력 풀이 stack을 이용해서 문제를 풀 수 있다. 연산자 (+, -, *, /)가 나오면 스택에서 숫자 두개를 꺼낸 다음에 (pop 2번) 연산을 하고 다시 스택에 push 한다. 연산자가 아닐 경우에 스택에 push를 한다. 반복문이 끝나면 스택의 to
문제 입출력 풀이 완전탐색 문제이다. 부분수열의 합이 s와 같은 경우의 수를 찾는다. cnt가 n과 같아지면 return을 한다. -7, -3, -2, 5, 8의 경우에는 (-7)+(-3)+(-2)+5+8 = 1인 경우의 수 한개가 나온다. 코드
문제 입출력 풀이 이분 탐색으로 문제를 풀 수 있다. M미터의 나무를 구하기 위해 목재절단기에 설정할 수 있는 최대 높이 H를 구하는 문제이다. 상근이가 7미터의 나무를 가져가야하며 나무의 높이들이 20, 15, 10, 17 일때 절단기에 설정하는 높이 H를 15
문제 입출력 풀이 백준 2805 나무 자르기랑 비슷한 문제이며 이분 탐색으로 풀 수 있다. 정확히 n개의 랜선을 찾는것이 아니라 n개 이상의 랜선을 찾는 문제이다. left를 0이 아닌 1로 초기화 해야한다. int형 범위를 벗어남으로 long long형으로 선언
우선순위 큐 (priority_queue) 를 이용해서 문제를 풀 수 있다.0이 입력되면 큐에 있는 가장 작은 수가 출력이 된다. 큐가 비어있는 상태라면 0을 출력한다.0 이외의 수가 입력이 되면 큐에 push를 한다.https://blockdmask.tist
문제 입출력 풀이 우선순위 큐 (priority_queue) 를 이용해서 문제를 풀 수 있다. 백준 1927은 작은 값부터 출력하는 문제이며 백준 11279는 큰 값부터 출력하는 문제이다. https://blockdmask.tistory.com/107 위 링크를
문제 입출력 풀이 n과 m은 최대 500이며 땅의 높이는 최대 256이므로 500 x 500 x 256 = 6천 4백만 이므로 브루트포스 알고리즘으로 문제를 풀 수 있다. 가능한 땅의 높이인 0부터 256까지 완전탐색을 한다. 현재 위치가 땅보다 작다면 2번작업을
하나 이상의 연속된 소수로 입력받은 n을 나타낼 수 있는 경우의 수를 찾는 문제이다.20은 소수로 나타낼 수 없다.3은 소수 3으로 나타낼 수 있다.41은 2+3+5+7+11+13, 11+13+17, 41 로 나타낼 수 있다.n이 최대 400만까지이므로 O(n) 알고리
문제 입출력 풀이 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중에 가장 짧은 것의 길이를 구하는 문제이며 투포인터 알고리즘을 사용하면 된다. 15 이상인 수 중에 가장 짧은 것의 길이는 5+10, 10+7 인 2이다. 만약 이러한 합을 만드는 것이 불가
문제 입출력 풀이 두개의 용액을 더해서 0에 가까운 용액을 만드는 문제이며 투포인터 알고리즘을 사용하면 된다. 주어진 용액이 -2, 4, -99, -1, 98일때 -99, 98을 통해 0에 가까운 용액을 만들 수 있다. 연속된 값들을 더해서 결과를 찾는 문제가 아
문제 입출력 풀이 배열 내에서 자신보다 작은 값이 몇개 존재하는지를 찾는 문제이다. 이중 for문을 사용하면 될거같았지만 n의 값이 최대 1백만이여서 O(n^2)으로는 문제를 풀 수가 없다. 따라서 O(nlogn) 이하의 시간복잡도로 해결해야 한다. 이중 벡터를
주어진 회의를 시작하는 시간과 끝나는 시간으로 최대 진행 가능한 회의 갯수를 구하는 문제이다.한 회의가 끝나고 바로 다음 회의를 시작할 수 있다.회의가 끝나는 시간으로 오름차순 정렬을 한 다음에 남은 회의 시간 중 가장 먼저 시작하는 회의시간을 찾고 이 회의에 해당하는