본문 바로가기

전체 글

(126)
[C++] next_permutation()을 활용한 조합 생성 ▶문제설명1부터 6까지의 중복되지 않은 숫자들이 있다. 6개의 숫자 중 3개를 뽑아내는 모든 경우의 수를 출력하라. ▶HintSTL을 활용하여 쉽게 해결할 수 있다. #include next_permutation( *.begin(), *.end() ) ); next_permutation( 배열의 시작 주소, 배열의 끝 주소+1 ) ); next_permutation()은 vector나 array의 시작주소, 끝주소를 매개변수로 받아서 vector(array)의 원소를 교환하여 순열을 만들어 주고 true를 반환하며 마지막 순열 생성 후 false를 반환한다. 같은 크기의 다른 배열을 생성하고 0으로 초기화 한 후에, 골라 낼 원소의 개수만큼 뒤에서부터 원소를 1로 변경하여 그 배열로 순열을 생성하고, 이..
[C++] STL vector를 활용한 배열 동적 할당 ▶#include1. 배열을 동적으로 생성하고 싶을 때 유용하게 사용 - 1차원 배열vector arr1 (10, 0); : 사이즈 10, 요소의 값을 0으로 초기화해서 선언 - 2차원 배열 (10x10)vector arr2(10, vector(10, 0)); vector arr3(10);for (int i = 0; i < 10; i++) {arr3[i] = vector(10,0);}arr2와 arr3는 동일한 결과를 보여준다.단지 선언시 초기화 하는 것과 아닌 것의 차이일 뿐이다. 원소 접근 방법은 일반 2차원 배열과 똑같다.
[SWEA] 2112. 보호 필름 ▶문제설명[SWEA] 2112. 보호 필름 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V1SYKAaUDFAWu&categoryId=AV5V1SYKAaUDFAWu&categoryType=CODE ▶HintDFS 문제이다. 아래와 같이 3번의 재귀 호출로 모든 경우를 탐색할 수 있다. 현재 필름의 상태를 저장한다. 1. 약품을 주입하지 않고 다음 필름의 인덱스와 현재 약품 주입 횟수를 인자로 하여 함수를 재귀적으로 호출한다. 2. 현재 필름에 A약품을 주입하고 다음 필름의 인덱스와 현재 약품 주입 횟수+1을 인자로 하여 함수를 재귀적으로 호출한다. 3. 현재 필름에 B약품을 주입하고 다음 필름의 인덱스..
[SWEA] 1868. 파핑파핑 지뢰찾기 ▶문제설명[SWEA] 1868. 파핑파핑 지뢰찾기 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LwsHaD1MDFAXc&categoryId=AV5LwsHaD1MDFAXc&categoryType=CODE ▶Hint지뢰가 없는 위치에 상/하/좌/우/대각선 8방향에 존재하는 지뢰의 개수를 먼저 구한 뒤 지뢰 개수가 0개인 위치를 먼저 click해서 연쇄적으로 터뜨린 후 나머지를 click해서 해결하면 된다. ▶Solution
[BOJ] 백준 3055. 탈출 ▶문제설명[BOJ] 3055. 탈출 https://www.acmicpc.net/problem/3055 ▶Hint매 초마다 물이 퍼져나가는 것을 먼저 처리한 뒤 고슴도치가 이동 가능한 경로로 이동하게 하면 된다. BFS를 활용하면 도착지까지 이동 가능한 모든 경로를 탐색해볼 수 있다. 도착지에 도달했을 때 걸린 시간이 가장 짧은 것을 정답으로 한다. ▶Solution
[SWEA] 5644. 무선 충전 ▶문제설명[SWEA] 5644. 무선 충전 https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo ▶Hint각 BC의 충전 가능 영역을 3차원 배열로 저장한다. 그러면 사용자 A와 B가 현재 위치에서 접속할 수 있는 BC를 모두 체크할 수 있다. 사용자 A와 B를 1초에 한칸씩 이동시키고, 매 초마다 현재 위치에서 접속할 수 있는 BC를 모두 체크하면서 (완전 탐색) 가장 큰 충전량 누적 값을 찾으면 된다. A와 B가 같은 BC의 영역에 속하는 경우 충전량을 반으로 나누어 가지게 된다는 점을 주의해야 한다. ▶Solution
[SWEA] 4014. 활주로 건설 ▶문제설명[SWEA] 4014. 활주로 건설https://www.swexpertacademy.com/main/code/problem/problemSubmitHistory.do?contestProbId=AWIeW7FakkUDFAVH ▶Hint땅의 높이들이 주어진다.땅의 높이 차가 1인 경우에 경사로를 놓아 활주로를 연결할 수 있다. 경사로의 높이는 항상 1이며, 세로로 세울 수 없다. 단, 경사로의 길이 X가 주어지는데활주로를 만드는 과정에서경사로가 길어서 놓을 공간이 부족한 경우,경사로가 겹쳐지게 놓이는 경우는 허용하지 않는다. 가로, 세로로 완성될 수 있는 활주로 라인의 개수를 구하는 문제다. 내리막길과 오르막길로 나누어서 생각하고내리막길일때 경사로를 놓는 경우 그 위치를 체크해두고,오르막길일때 경사로..
[SWEA] 6808. 규영이와 인영이의 카드게임 ▶문제설명[SWEA] 6808. 규영이와 인영이의 카드게임https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWgv9va6HnkDFAW0 ▶Hint1부터 18까지의 숫자로 이루어진 카드가 있을 때,규영이가 9장, 인영이도 9장으로 나눠 가지고 간단한 카드 게임을 한다. [게임 규칙]각자 가지고 있는 카드들 중 하나를 뽑아서 낸다.카드의 번호가 더 큰 사람이 승리하며, 승리자는 제출한 카드 두 장의 합을 점수로 얻는다. 규영이는 카드를 받은 순서대로 제출하는 것으로 고정한다.인영이는 9!의 모든 경우의 수로 카드를 제출할 수 있다. 이 게임에서 규영이가 승리하는 경우의 수와, 지는 경우의 수를 계산하여 출력해야한..
조합 생성 알고리즘 ▶조합 (Combination)서로 다른 n개의 원소 중에서 순서에 상관 없이 r개를 취하는 것을 'n개에서 r개를 택하는 조합'이라고 한다. (표기 : nCr) ▶필요성문제를 해결하는 과정에서 n개의 숫자 중 r개를 선택할 때선택된 r개의 숫자들의 합이 최대/최소가 되는 경우를 찾아야 하는 경우가 있다. 불가피하게 모든 경우를 확인해보는 수밖에 없다면어떤 소스코드를 작성해서 문제를 해결해야할까? ▶예제 : 5C3의 모든 경우를 출력하라.[주어진 원소]15, 23, 5, 1, 42 [결과]15 23 515 23 115 23 4215 5 115 5 4215 1 4223 5 123 5 4223 1 425 1 42 ▶Hint재귀 함수로 구현하면 간단한 코드로 해결할 수 있게 된다.주어진 원소들을 저장할 길이 ..
[Java] 숫자 야구 게임 ▶프로그램 설명컴퓨터가 0~9 사이의 숫자 3개를 중복되지 않게 선택한다. [컴퓨터가 선택한 숫자]2 0 7 사용자도 0~9 사이의 숫자 3개를 중복되지 않게 선택한다. [사용자가 선택한 숫자]5 2 7 사용자가 고른 숫자 3개를 컴퓨터가 선택한 숫자 3개와 비교했을 때숫자가 포함되어 있지만 위치가 일치하지 않는 경우에는 ball숫자가 포함되어 있고 위치까지 일치하는 경우에는 strike숫자가 포함되어 있지 않은 경우에는 out [결과]1 strike 1 ball 1 out 사용자가 주어진 도전 횟수 내에 숫자 3개를 입력하여 숫자의 종류와 위치까지 모두 맞추면 승리하는 게임이다.즉, 결과가 3 strike 0 ball 0 out인 경우에 사용자의 승리로 게임이 종료된다. ▶소스코드123456789101..
[SWEA] 5653. 줄기세포배양 ▶문제설명[SWEA] 5653. 줄기세포배양https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE ▶Hint입력으로 주어지는 K의 최대값이 300이므로세포의 생명력이 모두 1이라고 가정했을 때 상하좌우 최대 150개씩 번식해 나갈 수 있다. 입력으로 주어지는 세포의 정보를 저장할 2차원 배열을 하나 만들고좌표의 시작값을 한 가운데로 하여 세포의 생명력 값을 입력받는다. [각 세포가 가지는 정보]1. 비활성/활성/죽음을 나타내는 상태 정보2. 생명력3. 좌표4. 번식의 여부5. 상태가 변화할 다음 시간에 대..
Git 기초 명령어 정리 ▶설명 & 명령어 - 현재 디렉토리를 작업 공간(working directory)으로 초기화한다.git init [디렉토리명] - 현재 상태를 보여준다.git status - 해당 파일을 관리할 수 있도록 선언한다. 즉 commit 대기 상태로 전환된다. (파일이 staging area에 올라가게 됨)git add [파일명] - 버전을 만든다. 버전이란 의미있는 변화를 말한다. 변경 사항(commit 대기중인 파일들)을 repository에 commit ID로 저장한다.git commit -a : 모든 변경사항을 add한 뒤 commit 함 (한 번도 add된 적 없는 파일은 무시됨)-m "[commit message]" : commit message를 인라인에서 처리함 - history를 보여준다.gi..