📌문제예제 3-3 숫자 카드 게임여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임1. 숫자 카드가 N x M 형태로 놓여 있다. N은 행의 개수, M은 열의 개수를 의미2. 먼저 뽑고자 하는 카드의 행을 선택한다.3. 선택된 행의 카드들 중 가장 숫자가 낮은 카드를 뽑아야 한다. 📌풀이각 행마다 가장 작은 수를 찾은 뒤 그 중에서 가장 큰 수를 선택하는 방법 min 함수를 사용해서 각 행마다 가장 작은 숫자를 찾아냄이전 행에서 가장 작은 수와 현재 행에서 가장 작은 수를 비교해서 둘 중에 큰 값을 선택 📌코드n, m = map(int, input().split())result = 0# 한 줄씩 입력받아 확인for i in range(n): data = list(map..
📌문제예제 3-2 큰 수의 법칙다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만들어라. 단, 배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 배열의 크기 N, 숫자가 더해지는 횟수 M, 연속해서 더할 수 있는 최대 횟수 K 📌풀이 1(단순한 방법)가장 큰 수와 두 번째 큰 수만 저장가장 큰 수를 K번(연속으로 더할 수 있는 최대 횟수) + 두 번째 큰 수 1번 + ... 반복 📌코드 1# N, M, K를 공백으로 구분하여 입력받기n, m, k = map(int, input().split())# N개의 수를 공백으로 구분하여 입력받기data = list(map(int, input().split()))data.so..
📌그리디 알고리즘그리디 알고리즘 = 탐욕법현재 상황에서 지금 당장 좋은 것만 고르는 방법 기준에 따라 좋은 것을 선택하는 알고리즘이므로 '가장 큰 순서대로', '가장 작은 순서대로' 같은 기준을 문제에서 제시해준다. 정렬 알고리즘과 짝을 이뤄 자주 출제된다. 📌문제예제 3-1 거스름돈당신은 음식점의 계산을 도와주는 점원이다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한히 존재한다고 가정한다. 손님에게 거슬러 줘야 할 돈이 N원일 때 거슬러 줘야 할 동전의 최소 개수를 구하라. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수이다. 📌풀이'가장 큰 화폐 단위부터' 돈을 거슬러 준다.500원짜리 N개 → 100원짜리 N개 → 50원짜리 N개 → 10원짜리 N개 📌..
*드림코딩 by 앨리 님의 유튜브 강의 내용을 바탕으로 작성했습니다. async와 defer의 차이 html에서 javascript를 포함할 때 어떻게 포함하는 것이 더 효율적인가? -head 내 단순히 script 를 포함하는 경우 사용자가 html 파일을 다운 받았을 때, 브라우저는 한 줄씩 분석(parsing) 한 줄씩 분석하다가 head 내 script 태그를 만나면 js파일을 다운받아야 한다고 이해 html을 분석하는 것을 멈추고 필요한 js 파일을 서버에서 다운 받아서 실행한 후 다시 분석 시작하게 됨 만약, 인터넷도 느리고 js 파일 사이즈도 크다면 사용자가 웹사이트를 보는데까지 많은 시간이 소요 될 것 -> script를 그냥 head에 포함하는 것은 좋지 않음 -body 끝 부분에 scr..
문제 은민이는 4와 7을 좋아하고, 나머지 숫자는 싫어한다. 금민수는 어떤 수가 4와 7로만 이루어진 수를 말한다. N이 주어졌을 때, N보다 작거나 같은 금민수 중 가장 큰 것을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. N은 4보다 크거나 같고 1,000,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 N보다 작거나 같은 금민수 중 가장 큰 것을 출력한다. #include using namespace std; int main() { int n, temp, flag; cin >> n; for (int i = n; i >= 0; i--) { temp = i; flag = 1; while (temp != 0) { if (temp % 10 != 4 && temp % 10 != 7) ..
문제 영식이는 직사각형 모양의 성을 가지고 있다. 성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다. 성의 크기와 경비원이 어디있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다. 출력 첫째 줄에 추가해야 하는 경비원의 최솟값을 출력한다. #include #include using namespace std; int main() { int n, m, row, co..
문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. #include using namespace std; int main() { string s; int arr[26] = { 0, }, count = 0, alphaindex; cin >> s; for (int i = 0; i < s.length(); i++) { if (s[i]..
문제 다섯 개의 자연수가 있다. 이 수의 적어도 대부분의 배수는 위의 수 중 적어도 세 개로 나누어 지는 가장 작은 자연수이다. 서로 다른 다섯 개의 자연수가 주어질 때, 적어도 대부분의 배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다. 출력 첫째 줄에 적어도 대부분의 배수를 출력한다. #include using namespace std; int main() { int arr[5] = {}; for (int i = 0; i > arr[i]; } int num = 1; while (1) { int count = 0; for (int i = 0; i < 5; i++) { if (num %..
문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. #include using namespace std; int main() { int n, t..
문제 두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs의 각 문자들의 순서를 잘 바꾸면 succor이 되기 때문이다. 한 편, dared와 bread는 서로 애너그램 관계에 있지 않다. 하지만 dared에서 맨 앞의 d를 제거하고, bread에서 제일 앞의 b를 제거하면, ared와 read라는 서로 애너그램 관계에 있는 단어가 남게 된다. 두 개의 영어 단어가 주어졌을 때, 두 단어가 서로 애너그램 관계에 있도록 만들기 위해서 제거해야 하는 최소 개수의 문자 수를 구하는 프로그램을 작성하시오. 문자를 제거할 때에는 아무 위치에 있는 문자든지..