본문 바로가기

Algorithm

(640)
삼성 모의 테스트 8825. 홀수 중간값 피라미드2 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 구현은 간단 시간복잡도는 알고리즘 단계의 최적화 문제가 아니고 자잘한 변수 설정같은데서 얻는 문제 별로 유익하진 않았음. #include #include #include using namespace std; int main(int argc, char** argv) { int N; int test_case; int T; cin>>T; /* 여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다. */ for(test_case = 1; test_case > N; register int MAX = 2*N -1; register int *arr = new int[MAX]; vector v..
백준 1405번 미친 로봇 문제 통제 할 수 없는 미친 로봇이 평면위에 있다. 그리고 이 로봇은 N번의 행동을 취할 것이다. 각 행동에서 로봇은 4개의 방향 중에 하나를 임의로 선택한다. 그리고 그 방향으로 한 칸 이동한다. 로봇이 같은 곳을 한 번보다 많이 이동하지 않을 때, 로봇의 이동 경로가 단순하다고 한다. (로봇이 시작하는 위치가 처음 방문한 곳이다.) 로봇의 이동 경로가 단순할 확률을 구하는 프로그램을 작성하시오. 예를 들어, EENE와 ENW는 단순하지만, ENWS와 WWWWSNE는 단순하지 않다. (E는 동, W는 서, N은 북, S는 남) 입력 첫째 줄에 N, 동쪽으로 이동할 확률, 서쪽으로 이동할 확률, 남쪽으로 이동할 확률, 북쪽으로 이동할 확률이 주어진다. N은 14보다 작거나 같은 자연수이고, 모든 확률은 ..
[S/W 문제해결 응용] 2일차 - 최대 상금 문체 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do BFS도 우선순위 큐도 전부 안됐던 문제 최대가 7개 정답까지 였다. 시간 초과를 해결 하기 위한 방법으로 DFS를 써야 했는데 결국 swap이 일어나야 하는데 아이디어로 전부 어떤 규칙에 대해서 한번에 커지는 방향만으로 가는 것은 불가능 하고, 결국 DFS 혹은 BFS로 모든 케이스를 다 찾아봐야 하는 문제였다. 우선 i,j 인덱스를 스왑을 하고 그 상태로 재귀한다. 그리고 다시 원상복구 한다. 재귀 상태는 i,j가 스왑된 상태로 끝까지 진행되고 인덱스 i,j 가 스왑된 후에 발생되는 모든 케이스에 대해 전부 탐색한다. 그때 만약 num만큼 스왑을 완료 했을 때의 string..
백준 11383번 뚊 정우는 "뚊"과 "돌돔"을 의미하는 두 이미지를 받았다. 과연 두 그림이 같은지 검사해보자. 즉 N× M 크기의 이미지와 N ×2 M 크기의 이미지가 주어질 때 첫 번째 이미지를 가로로 두 배로 늘이면 두 번째 이미지가 되는지 검사하는 프로그램을 작성하라. 입력 입력의 첫 번째 줄에 N, M (1 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄의 각 줄에는 M개의 문자가 주어진다. 다음 N개의 줄의 각 줄에는 2M개의 문자가 주어진다. 모든 문자는 영문 알파벳 대문자 혹은 소문자이다. 출력 첫 번째로 주어진 이미지를 가로로 두 배로 늘렸을 때 두 번째 이미지가 된다면 "Eyfa"을 출력하고, 되지 않는다면 "Not Eyfa"을 출력한다. 간 ㅡ 단. #include #include using name..
삼성 SW 역량테스트 5658. 보물상자 비밀번호 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do 중요한 점은 STL 사용시 iterator를 사용한다면 end() 참조시에 그 값은 공백이라는 점. 마지막 내용을 참조하고 싶으면 it = de.end(); 후에 *(it) 가 아니고 *(--it)를 사용해야 한다. 그리고 스트링을 int로 바꾸는 방법은 algorithm 헤더 선언 후에 atoi(str.c_str())이거지만 그냥 char형을 int로 바꾸는 방법은 char ch; 에서 ch-'0' 해주면 된다. #include #include #include #include #include #include #include using namespace std; int N,K; in..
삼성 SW 역량테스트 3752. 가능한 시험 점수 출처 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do union find도 인덱스 0,1이 유니온 되고 0,2 가 유니온 되면 0,1,2 가 유니온 되지 못하므로 해답이 아님. 하나의 인덱스에 해당하는 배열값에 대해 먼저 기록 되고 그 다음 인덱스에 해당하는 배열이 그 기록을 참조하여 새로운 값을 만들어 기록하고 그 다음 인덱스 배열 값이 또 그 기록을 참조하여 기록하면 자신을 중복하지 않고 여러개의 같은 인덱스가 중복되지 않는다. 백준의 소수의 곱 문제와는 다른 case! #include using namespace std; int arr[101]; bool visit[101]; bool total[10001]; void init()..
백준 9935번 문자열 폭발 문제 상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다. 폭발은 다음과 같은 과정으로 진행된다. 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다. 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다. 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다. 상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다. 폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다. 입력 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,00..
백준 2875번 대회 or 인턴 문제 백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.) 백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 그런데 올해에는 대회에 참여하려는 학생들 중 K명을 반드시 인턴쉽 프로그램에 참여하라는 학교의 방침이 생기게 되었다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다. 백준대학교에서는 뛰어난 인재들이 많기 때문에, 많은 팀을 만드는 것이 최선이다. 여러분은 N명의 여학생과 M명의 남학생, K명의 인턴쉽에 참여해야하는 인원이 주어질 때 만들 수 있는 최대의 팀 수를 구하면 된다. 입력 첫째 줄에 N, M, K가 순서대로 주어진다. (0 ≤ M ≤ 100), (0..