전체 글 259

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

[DP] 백준 11726, 11727 - 2xn 타일링

DP - 다이나믹 프로그래밍 구하기 1) n이 1,2,3.. 일때의 규칙성을 찾는다. n=1 답:1 n=2 답:2 n=3 답:3 2) 점화식 구하기 // BJ - 11726 2*n 타일링 // 다이나믹 프로그래밍 #include using namespace std; int arr[1001]; int dp(int x) { if (x == 1) return 1; if (x == 2) return 2; if (arr[x] != 0) return arr[x]; return arr[x] = (dp(x - 1) + dp(x - 2)) % 10007; //%10007은 오버플로우 방지 } int main() { int N; cin >> N; cout > n; cout