알골 27

[알골90제] 48번 - 각 행의 평균과 가장 가까운 값 (2차원 배열 탐색)

* 문제: 1) 9*9 격자판에 81개의 자연수가 주어짐 2) 각 행의 평균을 구함 3) 각 행의 평균과 가장 가까운 값 출력 - 평균은 소수 점 첫 째 자리에서 반올림 - 가까운 값이 2개이면 그 중 큰 값을 출력 * 입력: 1~9번째 줄까지 한줄에 1개씩 100보다 작은 자연수가 주어짐 * 출력: 각 행별 평균과 그 평균과 그 행에서 평균과 가장 가까운 수 나란히 출력 ex) 42 34 43 42 53 53 . . . * 계획: 1) 9*9를 2차원 배열로 입력받음 2) 각 행별로 평균을 구함 3) 구한 평균을 두고 1~9까지 순서대로 빼서 abs해줌. 4) 절대값이 가장 작은 수가 평균과 가장 가까운 값 * 코드 // 48번 - 각 행의 평균과 가장 가까운 값 #define _CRT_SECURE_N..

[알골90제] 47번 - 봉우리 (2차원 배열 탐색)

* 문제를 읽고 난 후 - N값을 받은 다음에 정말로 N*N의 2차원 벡터를 만들어야 하나 - 2차원 벡터를 만든다면 상하좌우에 있는 숫자는 어떤 식으로 계산해서 그 자리의 값을 알아낼 것인가 - 반복문을 이용해서 상하좌우 좌표값을 현재 자리 기준에서 연산하여 구하면 되나 - 어떤 알고리즘을 풀어서 해결해야 할지 감도 안 옴 * 풀이 방법 1) 전역 변수로 2차원 배열을 잡으면 모두 0으로 채워진다. 2) 입력받는 숫자 값을 (1.1)부터 넣기 시작한다. 3) 입력을 받았으면, 1행 1열부터 n, n열까지 탐색하는 것이다. 4) 2중 for문이 돌면서 각자가 봉우리 인지 확인해야 한다. 5) i행 j열에 왔다면? 상하좌우를 어떻게 볼 것인가. 6) 현재 a[i][j] a[i-1][j] 상 a[i][j+1..

[알골90제] 46번 - 멀티태스킹 (카카오 먹방 문제 변형)

입력 1) N개 2) N개만큼 각 처리해야할 시간 입력 3) 정전 발생한 시간 * 컴퓨터는 1번 작업부터 순서대로 1초씩 작업을 합니다. 각 1초만 작업하고 다음 작업으로 넘어가야합니다. * 마지막 번호의 작업을 1초했으면 다시 첫번째 작업을 해야합니다. * 처리가 다 끝난 작업은 사라지고 새로운 작업은 들어오지 않습니다. 여기서 구해해야할 것 출력! 정전 후 몇번 작업부터 다시 시작해야하냐는 것입니다. *이때 주의할 것은 정전이 되기 직전 끝낸 작업에서 그 다음 작업을 구하는 것입니다. 입력예제를 들어보겠습니다. 3 //몇개의 작업 1 //작업별 처리 시간 - 작업번호 1 2 //작업별 처리 시간 - 작업번호 2 3 //작업별 처리 시간 - 작업번호 3: 마지막 작업 번호 5 //정전 시간 출력 : 3..

[알골 90제] 37번 - LRU 카카오 캐시 문제 변형

1) Cache Miss : 해야할 작업이 캐시에 없는 상태로 위 상태에서 만약 새로운 작업인 5번 작 업을 CPU가 사용한다면 Cache miss가 되고 모든 작업이 뒤로 밀리고 5번작업은 캐시의 맨 앞에 위치한다. 5 2 3 1 6 (7번 작업은 캐시에서 삭제된다.) 2) Cache Hit : 해야할 작업이 캐시에 있는 상태로 위 상태에서 만약 3번 작업을 CPU가 사용 한다면 Cache Hit가 되고, 63번 앞에 있는 5, 2번 작업은 한 칸 뒤로 밀리고, 3번이 맨 앞으 로 위치하게 된다. 5 2 3 1 6 ---> 3 5 2 1 6 캐시의 크기가 주어지고, 캐시가 비어있는 상태에서 N개의 작업을 CPU가 차례로 처리한다면 N개의 작업을 처리한 후 캐시메모리의 상태를 가장 최근 사용된 작업부터 ..

[알골 90제] 15/16/17

15번 - 소수의 개수 자연수 N이 입력되면 자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요. 만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다. 제한시간은 1초입니다. 입력: 20 출력: 8 // 15번 - 소수의 개수 (제한 시간 1초) // 제한시간 넘어버림 #define _CRT_SECURE_NO_WARNINGS #include int main() { int N, cnt = 0; scanf("%d", &N); for (int i = 2; i

[알골 90제] 14번 - 뒤집은 소수

N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력 한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다. 뒤집는 함수인 int reverse(int x) 와 소수인지를 확인하는 함수 bool isPrime(int x)를 반드시 작성하여 프로그래밍 한다. 입력 5 32 55 62 3700 250 출력 23 73 #define _CRT_SECURE_NO_WARNINGS #include int reverse(int x) { int result = 0, tmp; while (x > 0) { tmp = x % 10; result = res..

[알골 90제] 13번 - 가장 많이 상용된 자릿수

13번 N자리의 자연수가 입력되면 입력된 자연수의 자릿수 중 가장 많이 사용된 숫자를 출력하는 프로그램 예를 들어 1123521355512315555라는 자연수가 입력되면 5가 가장 많이 사용된 숫자이므로 답. 답이 여러 개일 경우 그 중 가장 큰 수를 출력하시오. 입력 : 첫 줄에 자연수가 입력됨. 자연수의 길이는 100을 넘지 않는다. 출력 : 가장 많이 사용된 숫자 출력 #define _CRT_SECURE_NO_WARNINGS #include using namespace std; int main() { int digit[10] = { 0, }; int N, max = -9999999, res, temp; char num[101]; scanf("%s", &num); for (int i = 0; num..