문제링크입력 > 5 41 2 3 41 2 3 5...위와 같이 각 자리수마다 크게 n만큼 돌면서 1부터 m까지 중복없이 뽑아서 한줄씩 출력하는 문제입니다.일단 모든 경우의 수를 만들기 위해 제일 마지막 자릿수를 제외한 앞쪽 자리들을 고정시켜놓아야겠다고 생각했다.위 입력
문제링크n\*n 크기의 체스판에 n개의 퀸을 서로 공격하지 못하는 위치에 배치할 수 있는 경우가 총 몇 개인지 출력하는 문제이다.일단 퀸은 한 행에 하나씩 밖에 놓지 못한다.따라서 각 행에서 퀸을 놓을 수 있는 자리에 퀸을 놓자마자 행을 하나 증가시켜 그 다음 행에서
문제링크숫자 배열을 입력해서 저장한 후에 다시 임의의 숫자를 입력해서 숫자가 저장된 배열에 존재하면 1, 존재하지 않으면 0을 출력하는 문제이다.map<int, bool> myMap을 선언하고 input으로 받아온 것을 바로 myMap의 key로 넣고 동시에 va
연산자 끼워넣기25 60 0 1 0 (+-/)인 경우 1가지 경우5 633 4 51 0 1 0인 경우 2가지 경우가 나온다.3 + 4 53 4 + 5먼저 연산자 배열을 만들어두고, 0번째는 +, 1번째는 -... 이렇게 각 인덱스마다 어떤 연산자가 할당되어있는지
두 수의 합1 2 3 5 7 9 10 11 12105 12 7 10 8 9 1 2 3 1113양 쪽 끝에서 두 숫자를 더해서 13이 나오면 더 이상 그 숫자 중 하나와 다른 숫자를 더해서 13이 나오는 경우는 없으므로 양쪽에서 한칸씩 가운데쪽으로 당긴다.5+9=14인
카드
국영수
숫자 카드 2
듣보잡
두 용액
먹을 것인가 먹힐 것인가
부분수열의 합.
문제 링크 아이디어 설명 첫번째 집에는 반드시 하나의 공유기가 설치되어 있어야 한다. > 2 3 5 15 18 의 테스트 케이스가 있다고 하자 #1 처음에 간격은 9이 될 것이다. 5번 집에 공유기 한대를 설치하고 15번 집에 가서 또 한 대를 설치한다. 그다음 15번 집에 설치된 공유기와 그 전/후에 설치된 공유기의 간격이 최소 9이 되어야 하...
문제 링크 설명 나무들을 mid만큼씩 잘랐는데 목표치보다 많이 잘랐으면 mid를 높여야 때문에 start를 조정하고, 반대로 목표치보다 적게 잘랐으면 end를 조정해서 mid를 낮춘다. 제출 코드
문제링크 설명 제출코드
문제링크 설명 이 문제도 value를 기준으로 이분탐색을 진행한다. 각 예산이 정해져있으니 가장 큰 예산으로 가운뎃값을 구하고 합을 구한후 목표치보다 작은 경우 가운뎃값을 늘려주거나 줄이기 위해 범위를 조정한다. 제출 코드
문제링크 제출코드
수 고르기 아이디어 투포인터 알고리즘을 사용했다. 투포인터 알고리즘은 start = end = 0 항상 start 1 2 3 5에서 3 - 1 = 2 5 - 1 = 4 이므로 굳이 start를 가만히 놔둘 필요가 없다
문제 링크 아이디어 예전에 합병정렬을 구현해볼 때처럼 각각의 배열에 전용 인덱스를 0부터 두고 오름차순으로 정렬을 시킬때 비교를 해서 작은 배열의 idx만 증가하는 방식으로 구현을 했다. while문의 조건은 어느 한 인덱스가 배열 범위를 벗어나면 while문을 빠져나오는데, 이때 다른 한 배열의 인덱스는 배열의 끝까지 못간 상태로 빠져나온다. 그래서 ...
문제 링크 아이디어 설명 2 2 1 2 1 2 2 1 2 2 1 (크기 : 11) k=3인 경우 라이언 인형이 3개 이상 존재하는 '가장 작은' 연속된 집합의 크기를 구하라는 문제다. 여기서 키 포인트는 '가장 작은'이 된다. 위 배열의 경우 만약 '가장 큰' 연속된 집합의 크기를 구하는 문제였다면 배열 전체가 답이 된다. 하지만 가장 작은 집합의 크...
문제 링크 아이디어 설명 투 포인터 알고리즘을 이용했다. 연속된 수들의 합이 m보다 작은 경우, end를 sum에 더하고 1 증가시키고 m보다 같거나 큰 경우, start를 sum에서 빼고 1 증가시켰다. end는 더하기 담당, start는 빼기담당으로 생각한다. 코드 설명 처음에는 위 코드와 같이 end < n으로 돌려봤는데 예제코드1의 결과가 ...
문제 링크 아이디어 코드 설명 먼저 k만큼 수를 더하고, 답을 저장하는 변수인 ans에 수의 합을 저장한다. 그리고 그 다음 end를 1 증가시킨 후 앞쪽 숫자 하나를 빼고, 뒷쪽 숫자를 더하면서 k개수만큼 한 덩어리로 한칸씩 이동하면서 가장 큰 수를 찾도록 코딩했다. 제출 코드
문제 링크 설명 1개 이상의 단위로 문자열을 잘라서 압축할 때 압축된 문자열 길이가 가장 작은 것을 찾는 문제이다. 그렇다면 반복문을 돌려서 단위 1부터 문자열을 끝까지 순회하면서 압축된 문자열의 길이가 작을 경우 ans값과 비교하여 갱신시켜 주면 된다. 위 코드
문제 링크자료구조 시간에 배운대로 구현을 하면 된다.
문제 링크2차원 배열을 쭉 돌면서 아직 방문하지 않은 1을 발견하면 queue에다 넣고 다시 빼서 상하좌우도 똑같이 조건을 만족하면 queue에다 넣고 다시 빼고를 반복해서 queue가 빌 때까지 그짓을 반복한다. queue가 비었다는 것은 연결된 단지가 더 이상 없다
문제 링크 설명 각각의 집과 모든 치킨집과의 거리를 구하여 각 집마다 최소 치킨거리를 구하고, 최대 m개의 치킨집을 살려뒀을 때 도시의 치킨거리 최소값을 구하는 문제이다. 치킨집 개수는 m보다 크거나 같고, 최대 m개의 치킨집을 살려둬야 한다. 만약 치킨집 개수가 10개이고 최대 5개의 치킨집을 살려둬야 했을 때 사실상 5개의 치킨집을 살려둬야 도시의...
문제 링크 설명 배열을 돌면서 이미 방문했거나(-1) 벽이거나(2) 범위를 벗어난 경우를 제외한 곳을 찾아 양과 늑대의 개수를 센 후 DFS 방식으로 위, 아래, 왼, 오른쪽으로 더 이상 탐색할 수 없을 때까지 탐사해나가면서 양과 늑대의 개수를 센 다음 양이 늑대보다 많을 경우와 적을 경우 빼는 작업을 해주었다. 코드
문제 링크 설명 BFS 방식을 이용 코드
문제 링크 설명 사전 지식 lower_bound 찾으려는 key 값보다 같거나 큰 숫자가 배열의 몇 번째에서 처음 등장하는지 찾는다. (단 배열 or 벡터는 오름차순 정렬되어 있어야 한다) 반환형은 iterator이다. 본론 개발팀에서 조건을 다 볼 수도 있고 몇 개만 볼 수도 있다. 따라서 list 4차원 vector 배열에 접수된 지원서의 모든...
문제 링크 설명 플로이드 와샬 : 모든 정점에서 모든 정점으로의 최단경로 초기 인접행렬 상태에서 k를 거쳐서 i, j를 가는 경로가 있으면 i = 1해주면서 계속 갱신해주는 방식 2->0, 0->1인 경로 존재, (2,1) 0->1, 1->2인 경로 존재, (0,2) 2->1, 1->2인 경로 존재, (2,2) 0->2, 2->0인 경로 존재, (0...
문제링크아스키코드 상의 숫자를 - '0'을 해서 숫자로 만들어준 다음 덧셈하면 된다.
문제링크Y를 13글자씩 민다고 생각해보자. Z를 넘어서면 다시 A로 돌아가야 한다. 여기서 % 연산을 생각해볼 수 있다.그렇다면 먼저 대문자의 경우 A(65) ~ Z(90)까지의 숫자를 먼저 0~25까지의 범위로 만들어준다. 그리고 13을 더해주는데 Y의 경우 24+1
문제링크 아이디어 가장 큰 오르막길을 구하는 문제이다. 숫자가 주어지면 하나씩 순회하면서 내리막이면 이전 오르막길에서 더했던 숫자를 결과값과 비교하여 더 큰 값으로 교체하는 방식으로 구현했다. 원래는 오르막길이 나오면 이중 for문으로 구현해서 하려고 했다가 구현
문제링크 아이디어 내 방식 나는 aabbbaa라는 문자열이 있을때 a부터 차례대로 순회하면서 a~z까지 이 문자열이 이전에 체크가 되었는지 확인할 수 있는 true/false 배열을 하나 두었다. 그리고 a부터 시작하면 다른 문자가 나올때까지 무한루프를 돌게 하였다
문제링크다이나믹 프로그래밍 기법을 이용하면 쉽게 풀리는 문제이다.밑에서 dp3 = dp5 = 1;을 해주는 이유는 3kg일때 3kg봉지 하나, 5kg일때 5kg 봉지 하나가 필요하기 때문이다. dp0~2, dp4는 3kg, 5kg 봉지로 담을 수 없기 때문에 0으로 설
문제링크sort하고 이분탐색 알고리즘으로 찾아서 있는지 여부를 0, 1로 출력하면 된다.