본문 바로가기

Algorithm

(68)
[EPPER/15회 3번] 재고없는 날 #include #include #include using namespace std; int solution(int N,int M){ int day=0; while(true){//노트북의 잔고가 0이 될때까지 반복됨 if(day%M==0) N++; N--; if(N==0)break; day++; } return day; } int main() { //N : 재고 M: 입고까지의 텀 int N,M; cin>>N>>M; cout
[EPPER/15회 5번]문자열 압축(하-1) //프로그래머스에서는 main함수 및 입출력문이 필요하지 않습니다. 대신 solution함수만 작성하면 됩니다. #include #include #include #include using namespace std; //숫자를 알파벳으로 변환하는 함수 char convert(int count){ if(count == 1) return 'A'; else if(count == 2) return 'B'; else if(count == 3) return 'C'; else if(count == 4) return 'D'; else if(count == 5) return 'E'; else if(count == 6) return 'F'; else if(count == 7) return 'G'; else if(count ..
[EPPER/13회 9번]N개의 작업공정(상-4) #include #include #include #include #define MAX 101 using namespace std; /* 공정끼리 선후관계가 존재하고, 선후관계에 따라 공정을 처리해한다. 선후관계가 있는 것은 보통 방향그래프로 나타낼 수 있고, 이는 위상정렬로 처리가능하다. 위상정렬 알고리즘? 선수과목 등 선행 관계가 있는 자료구조를 정렬하는 알고리즘 사이클이 없는 방향그래프에서 선행순서를 위배하지 않으면서 정점을 순서대로 정렬함 방향그래프에서 가 있다면 u가 v에 대해 선행됨 위상정렬 방법 1. 진입차수가 0인 정점을 큐에 삽입함 2. 큐에서 원소를 꺼내 에지를 제거한 후 진입 차수를 재계산 3. 모든 정점이 제거될때 까지 1~2를 반복함 4. 모든 원소를 방문하기 전 진입 차수가 0인 ..
[EPPER/13회 9번]주울 수 있는 최대 돈(상-3) #include #include #include using namespace std; /* 돈을 3개 연속해서 주울 수 없다. 그렇다면, 다음과 같이 3개의 돈이 연속으로 있다고 가정하자 ..., m, n, q, 그렇다면 일단 두가지로 나눌 수 있다. 1.n번째 돈을 주운 경우 2.n번째 돈을 줍지 않은 경우 줍지 않은 경우에는 제약조건을 고려할 필요가 없다. 하지만 주운 경우에는 내가 이 돈을 주워서 3연속이 되지 않았는지 제약이 걸린다 이를 다시 나누면 1-1) N번째 돈을 주움 + N-1번째 돈을 주움 (2연속) 1-2) N번째 돈을 주움 + N-2번째 돈을 주움 (연속x) 두가지 경우만 가능하다 그렇다면 N번째 돈 앞에 서있을 때 취할 수 있는 상황은 3가지이다. 1. 돈을 줍지 않기 (non u..
[EPPER/14회 5번]단어 게임(상-2) 단어와 단어의 첫글자들은 배열(c)/vector(c++)로 주어짐 만족해야하는 조건 1. 미리 주어진 (입력받은) 단어 목록일 것 → 전달받은 단어 배열 내로 정답을 한정함 2. 첫글자가 동일해야할 것 → 리스트를 for문으로 탐색하면서 첫글자가 동일할 떄 까지 비교 3. (2번 조건이 중복될 경우) 최소 횟수로 언급한 것 이어야 할 것 4. (3번 조건까지 중복될 경우) 알파벳 순서로 답할 것 → 언급횟수를 기준으로 정렬 + 언급횟수가 같으면 알파벳순으로 정렬 정렬을 해주면 for문으로 첫글자만 비교해서 첫번째로 같은 것을 정답으로 생각해 줄 수 있음 // 실제 시험에서는 Solution 클래스의 solution 함수를 사용합니다. 이를 감안하여 풀이해주세요. #include #include #incl..
[EPPER/13회 2번]거스름돈 계산(하-4) #include #include using namespace std; vector money = {50000,10000,5000,1000,500,100,50,10,8}; void solution(int m, int n) { // 화폐 종류 개수, 총 화폐 개수 출력 int change; int answer_1=0; int answer_2=0; int result=0; change = m-n; for(int i=0;i
[EPPER/14회 8번]토마토 보관(중-3) // 실제 시험에서는 solution 함수를 사용한다는 점을 감안하고 풀이해주세요. #include #include #include /* 이런 문제가 나오면 태두리에 -1을 넣어서 계산에 용이하게 만든다! 토마토가 모두 익을 수 있는 상황인가? 아닌가(-1) 를 먼저 판단해야함 모두 익을 수 없다 -> -1 => 토마토는 자발적으로 익을 수 x -> 무조건 근접한 곳에 익은 토마토가 존재하는지 확인 isPossible을 이용함 모두 익을수 있다 -> 며칠이나 걸리는지 판단하기 얼마나 걸릴지 모르기 떄문에 while문을 사용하고 while문의 내용은 토마토 배열을 스캔하면서 익은 토마토(1)이 있으면 상/하/좌/우 를 검사해서 이들이 0인경우 check배열에 true로 표시해둔다 스캔을 마쳤으면 check..
[EPPER/15회 7번] 도서관 좌석 예약(중-4) //프로그래머스에서는 main함수 및 입출력문이 필요하지 않습니다. 대신 solution함수만 작성하면 됩니다. #include #include #include /* Greedy Algorithm "종료시간"이 빠른 순서대로 2자리를 아무곳이나 배치 하지만 종료시간이 동일하다면 시작시간이 더 빠른 것을 먼저 배치 sort(T start, T end, Compare comp); sort(정렬 시작,정렬의 끝, 기준함수) start 내림차순 a가 b에 비해 작다 (a 오름차순 */ using namespace std; //시작시간 배열(s) , 끝나는 시간 배열(e)를 세트로 묶은 pair vector vector v; //sort 함수를 사용할 때 기준이 되게 하는 함수 bool compare(paira,..

728x90