본문 바로가기

알고리즘 공부 및 문제 풀이

(317)
[기출 하] 단순 계산기 [문제] 두 수의 평균만 구할 수 있는 단순계산기가 있다. 처음에는 두 점수를 목록에서 선택해 두 점수의 평균을 구한다.(선택된 점수는 목록에서 제거된다.) 이후 목록에 남아있는 점수들 중 하나를 선택해 앞서 구한 평균과의 평균을 새롭게 구한다. 목록에 점수가 모두 없어질 때까지 위의 과정을 반복 할 때, 가장 큰 평균값을 구할 수 있는 프로그램을 작성하시오. [코드] float solution(int num_arr[], int n){ float sol; //가장 큰 평균값 sort(num_arr, num_arr+n); sol = (num_arr[0]+num_arr[1])/2.0; for(int i=2; i
[기출 중] 프로그래머스 입국심사 [문제] https://programmers.co.kr/learn/courses/30/lessons/43238# 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr [풀이] 이분탐색 카테고리에 들어있는 문제인지 모르고 동적계획법으로 풀어야겠다 해서 뻘짓을 엄청 했다...근데 이분탐색으로 풀으라고 진작에 알려줬어도 감도 못잡았을 것 같다. 이 문제를 이분탐색으로 풀기 위해서는 (총 심사 가능 인원) = (전체 심사시간) / (심사관 당 심사시간) 라는 것을 이해하면 된다. 먼저 가장 최악의 심사 시간은 times를 ..
[기출 중] 백준 1074 Z [문제] https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. 만약, N > 1이 라서 www.acmicpc.net [풀이] 분할정복 문제이다. 현재 사분면 내에 r행 c열이 존재하면, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 순으로 재귀적으로 탐색해준다. 만약 현재 사분면 내에 r행 c열이 없으면 그 사분면 크기(width*width) 만큼을 탐색 순번(횟수)에 더해주어야 한다. [코드] #include #include using namespace std; int n, r, c; int..
[기출 중] 문자열 압축 [문제] 0과 1만 등장하는 문자열에 대해서 연속되는 0의 개수와 1의 개수를 알파벳과 매칭시켜 압축하자. 시작이 1일 경우에는 1을 앞에 붙여준다. 예를 들어 000011110은 0이 4번, 1이 4번, 0이 한번 나오므로 DDA이다. 1100011111은 1로 시작하고, 1이 2번, 0이 3번, 1이 5번 연속되므로 1BCE이다. [코드] string solution(string s){ string answer = ""; int cnt = 0; if(s[0]=='1'){ answer += '1'; } for(int i=1; i
[기출 하] 백준 13458 시험 감독 [문제] https://www.acmicpc.net/problem/13458 13458번: 시험 감독 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000) www.acmicpc.net [코드] #include #include using namespace std; int p[1000001]; int main() { //시험장 개수, 응시자 수, 총감독관이 감시할 수 있는 학생 수, 부감독관이 감시할 수 있는 학생 수 int n, b, c; cin >> n; for (int i = 0; i < n; i++) cin ..
[기출 하] 백준 1259 팰린드롬수 [문제] https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net [코드] #include #include using namespace std; int main() { string s; bool check; while (true) { check = true; cin >> s; if (s == "0") break; for (int i = 0; i < s.length()/2; i++) { if (s[i] != s[s.length() - i -1]) { check = fal..
[기출 하] O, X 퀴즈 [문제] 문제를 맞으면 O, 틀리면 X인 결과 문자열이 주어졌을 때, 연속 된 O의 개수가 해당 문제에 주어지는 점수라고 한다. 예를 들어 OXXOOOX는 1+0+0+1+2+3+0=7점이다. OX문제에 대한 결과 값을 출력해라. [코드] int solution(string input){ int total = 0; int num = 1; for(int i=0; i
[기출 하] 깨알나라 신문 기사 [문제] 문자열의 행, 열, 행 확대 크기, 열 확대 크기가 주어질 때 확대 된 문자 배열을 출력하라. 입출력 예시) [코드] vector solution(int r, int c, int zr, int zc, vector words) { vector answer; string s; //행, 열 for(int i=0; i