[알고리즘] 문제풀이 연습 69

[알골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..

[0707 복습] 알골 연습문제 90제 - 11번

11번 - 숫자의 총 개수(small) 자연수 N이 입력되면 1부터 N까지의 자연수를 종이에 적을 때 각 숫자는 몇 개 쓰였을까요? 예를 들어 1부터 15까지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1, 5으로 총 21개가 쓰였음을 알 수 있습니다. 자연수 N이 입력되면 1부터 N까지 각 숫자는 몇 개가 사용되었는지를 구하는 프로그램을 작 성하세요. * i를 바로 나눠주면 안됨. i는 계속 돌아가고 temp에 넣어서 temp를 쪼개서 한 숫자의 자릿수를 세야함 // 11번 - 숫자의 총 개수(small) #define _CRT_SECURE_NO_WARNINGS #include int main() { int N, count = 0, temp;..

[0706 복습] 알골 연습문제 90제 : 6~10번

알골 연습문제 90제 : 6~10번 6번 - 숫자만 추출 문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만 듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다. 만약 “t0e0a1c2her”에서 숫자만 추출하면 0, 0, 1, 2이고 이것을 자연수를 만들면 12가 됩니 다. 즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 12를 출력하고, 다음 줄에 12의 약 수의 개수를 출력하면 됩니다. 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다. ▣ 입력설명 첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다. ▣ 출력설명 첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니 * 문자 배열 끝에는 ..

[0705 복습] 백준2164 + 연습문제 5개

백준2164 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리 www.acmicpc.net c++ deque를 이용하면 쉽게 풀 수 있다. // BJ 2164 #define _CRT_SECURE_NO_WARNINGS ..

[DP] 백준 - 2133 타일 문제 3*n !!복습필수!!

하... 이건 기존 2*n랑 다르게 4부터 짝수일 때마다 +2가지 씩 추가되는 건데.. 점화식 너무 어렵고...ㅠㅠ 다른 사람 코드보고 겨우 풀었는데 완벽하게 이해도 안됨.. 스..트..레....스........ 고딩때 포기한 점화식 아직까지 괴롭히는구나 ㅠㅠ휴 수학..수학.. 수학/코딩 논리적으로 사고해서 일반화된 식을 뽑아내야하는데.. 너무 어렵다 ㅠㅠ 다시봐야지... // BJ 2133 타일채우기 // DP #include using namespace std; int arr[31]; int dp(int x) { if (x == 0) return 1; if (x == 1) return 0; if (x == 2) return 3; if (arr[x] != 0) return arr[x]; int resu..