programming language/Algorithm 82

[Divide and Conquer 예제] 백준 2751 수 정렬하기2

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. #include #include #include using namespace std; int N = 0; vector arr; //N개의 수가 주어졌을 떄, 오름차순으로 정렬하기 int merge(int left, int middle, int right, int* s) { int len = right - left + 1; int* sort..

[Divide and Conquer 예제] 백준 1780 종이의 개수

문제 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1의 세 값 중 하나가 저장되어 있다. 우리는 이 행렬을 적절한 크기로 자르려고 하는데, 이때 다음의 규칙에 따라 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 9개의 종이로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으로만 채워진 종이의 개수, 1로만 채워진 종이의 개수를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 37, N은 3k 꼴)이 주어진다. 다음 N개의 줄에는 N개의 정수로 행렬이 주어진다. 출력 첫째 줄에 -1로만 채워진 종이의 ..

[Divide and Conquer 예제] 프로그래머스 Level3 이분탐색 입국심사

문제 문제 설명 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그곳으로 가서 심사를 받을 수도 있습니다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다. 입국심사를 기다리는 사람 수 n, 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 times가 매개변수로 주어질 때, 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제한사항 입..

[프로그래머스 Level1] 신규 아이디 추천

문제 입출력 문제풀이 1. 7단계를 순차적으로 맞춰야 하므로 단계별 코드를 짰다. -1단계 : 대문자->소문자로 변경, tolower() 함수를 이용했다. -2단계 : 조건에 맞지 않는 문자 삭제하기. if조건문에 문제조건에 맞지 않는다면 으로 썼는데 시간초과가 났다. if조건문에 문제조건문을 쓰고 continue와 else문으로 제거를 했다. 제거시, erase()함수를 이용한다. : new_id.erase(new_id.begin() + i); -3단계 : 문자 '.' 가 2개 이상이면 1개만 존재하도록 하기. 나는 i-1와 i+1가 '.'일때 모두 따져야 한다고 생각했는데( 시간초과 남) , i 검사시 i-1 만 따지면 되었다. 그래서 for문도 i=1부터 시작! i-1있으니까. -4단계 ~ 7단계 ..

[프로그래머스 Level1] 실패율

문제 입출력 문제 풀이 1. 실패율 구하기 = 해당 스테이지 통과하지 못한 사람 / 해당스테이지도전자 (해당 스테이지까지 온 사람) - 주어진 배열 : 스테이지 통과하지 못한 사람들의 스테이지 번호들 (총 배열의 원소개수 = 총 인원) - 배열을 정렬하기 : 해당 스테이지까지 온 사람과 아닌 사람을 구분할 수 있을 것 같아서. - stages[index] 가 1~5 (스테이지들)이라면 index++해주면서 index값이 실패율의 분자니까 이용한다. - usernum은 해당 스테이지도전자인데, 다음 for문 전에 스테이지를 통과못한 인원(index == failcnt)를 빼준다. - 결과값에 필요한 스테이지 번호와 함께 fail 벡터에 실패율과 스테이지번호 저장한다. while(stages[index] =..

[프로그래머스 Level1] 다트게임

문제 입출력 문제 풀이 1. string dartResult 를 쪼개서 조건문으로 숫자/알파벳/옵션을 비교한다 - #include string STL 이용한다 : dartResult[i] , dartResult.size() 2. 숫자 비교하기 - dartResult[i]가 0~9사이일 때의 조건문 설정 - 숫자가 0-9일때 값 저장 - 숫자가 10일때 : [i+1]가 0이면 10을 저장한다. i++을 통해 10 다음의 문자열을 비교하기 3. 알파벳 비교하기 - dartResult[i]가 S D T 일 때의 조건문 설정 - D, T일 때 pow(score, 2)를 이용해 제곱수를 저장한다 - pow()는 #include 4. 옵션 비교하기 - 알파벳 다음의 [i+1]을 비교하기 - *일때 : 전의 값 또한..

[카카오 신입 공채 1차 코딩 테스트 문제] 비밀지도

문제 입출력 문제풀이 (1) 하나의 배열 값을 만들기 - 입력받은 정수배열 순서대로 OR 연산 하기 - arr1에 arr1과 arr2의 OR연산값을 넣었다. (2) OR연산값 십진수를 이진수로 변환하여 출력하기 - arr1 % 2 를 통해 이진수로 변환하기 - string tmp에 stl push_back을 이용해서 값 넣기 - 한번의 계산 뒤, arr1 = arr1/2으로 계산반복 - 입출력 조건에서 이진수 자리가 n이므로 while( tmp.size() != n)까지 반복하기 - 이진수 값은 계산 순서의 반대이므로 reverse함수 이용해 순서 바꾸기 #include #include #include #include //reverse함수 이용 using namespace std; //(1) 각 원소들을..

[프로그래머스 Level2] 프렌즈4블록

문제 입출력형식 문제풀이 (1) 4개의 알파벳이 같은 지 확인하기 vector board 에서, board[i][j]으로 하나의 문자를 나타낼 수 있다. i+1, j+1으로 네 개의 알파벳을 나타내고, if문으로 비교한다. if문에 들어간 경우 새로만든 vector visit(m, vector(n)) 에다 네 개의 알파벳을 표시한다. 이때 삭제를 바로 하면 안된다. 겹치는 경우, 바로 지워버리면 잘못 지워지는 경우가 발생하므로 먼저 visit 값을 이용해 삭제 전에 저장해둔다. if문에 들어간 경우 새로만든 vector visit(m, vector(n)) 에다 네 개의 알파벳을 표시한다. (참조 https://yabmoons.tistory.com/567) (2) 같은 알파벳 4개를 삭제하고, 위의 알파벳..