'Algorithm/Python, C++' 카테고리의 글 목록 (4 Page)
본문 바로가기

Algorithm/Python, C++80

백준 10809_알파벳찾기 [C++] 문제 풀이 이 문제는 입력받은 단어의 각 알파벳이 몇번째에서 나오는지를 a~z까지 출력해주는 문제입니다. 만약 해당 알파벳이 나왔다면 0번째부터 순서를 출력하면 되고, 알파벳이 나오지 않았을 경우 -1을 출력해주면 됩니다. 먼저 알파벳 수만큼의 배열 alpha[26]과 입력할 수 있는 단어의 최대길이 arr[100]을 선언해 준 후에 arr[0]부터 alpha[0]~alpha[25]까지 비교 후 일치하는 알파벳이 있는 경우 배열의 순번을 알파벳에 해당하는 배열의 값으로 넣어주면 됩니다. 소스코드는 아래와 같습니다. 소스코드 #include #include using namespace std; int main(){ int alpha[26]; char input[100]; int value=0; for (i.. 2022. 7. 4.
백준 11720_숫자의 합 [C++] 문제 풀이 이 문제는 입력할 숫자의 자리수 N을 입력받고, N자리의 수를 공백없이 입력받아 각 자리의 수를 모두 더한 값을 출력하는 문제입니다. N 자리 수를 입력받아야 하기때문에 배열 arr[N] 으로 각 자리수를 입력 받아야하며, 숫자는 공백없이 입력받아야 하기 때문에 int 형의 배열이 아닌 char 형으로 하나의 숫자가 아닌 문자를 하나씩 입력받는다고 생각하면 쉽게 해결할 수 있습니다. 그 다음 입력받은 배열을 정수형으로 변환하는 과정이 필요합니다. 그래서 처음에는 입력받은 문자를 atoi, atoll등 숫자로 바꾸어 그 숫자를 한 자리씩 더하는 방식으로 진행하려 했으나, 수의 범위가 커지면 원하는 값이 출력되지 않는 상황이 발생하였습니다. 그것을 해결하기 위해 고민하던 중 이전에 풀었던 아스키코.. 2022. 7. 4.
백준 11654_아스키 코드 [C++] 문제 풀이 ASCII 는 영문 알파벳을 사용하는 대표적인 문자 인코딩입니다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있습니다. 이러한 아스키코드는 알파벳 및 특수문자를 포함하여 총 128개의 문자로 이루어져 있습니다. 더 자세한 내용은 아스키코드 목록에 대한 표를 참고하시면 됩니다. 이 문제는 이러한 아스키코드를 이용하여 어떠한 문자(대/소), 숫자를 입력하였을 때 그에 해당하는 순번(숫자)를 결과값으로 출력하는 문제입니다. 굉장히 간단하게 풀 수 있는 문제로 입력받은 char 문자를 정수(int)형으로 출력해주면 그에 대한 아스키코드 순번이 출력됩니다. 소스코드 #include using namespace std; in.. 2022. 7. 2.
백준 1436_영화감독 숌 [C++] 문제 풀이 이 문제는 제목에 666이 연속으로 들어가는 수를 찾는 문제입니다. 즉 어떠한 수 i가 1000으로 나누었을 때의 나머지가 666이 되고, 그때마다 +1씩 카운트하여 입력받은 n과 일치하는 수 i를 찾아야 한다는 뜻입니다. 여기까지만 들으면 666, 1666, 2666...... 이런식으로 찾으면 쉽게 해결할 수 있을 것이라는 생각이 듭니다. 하지만 여기에서 고려해야 할 사항이 하나 있습니다. 1~8번째까지의 예시를 바탕으로 풀이를 진행하겠습니다. n=1 -> 666 n=2 -> 1666 n=3 -> 2666 n=4 -> 3666 n=5 -> 4666 n=6 -> 5666 n=7 -> 6665 n=8 -> 6666 예시에서 볼 수 있듯 6666 이전에 666이 연속으로 들어가는 수인 6665가.. 2022. 6. 29.
백준 7568_덩치 [C++] 문제 풀이 이 문제는 인원수와 그들의 키와 몸무게를 입력받아 서로의 덩치를 비교하는 문제입니다. 여기서 덩치를 비교하는 조건은 키와 몸무게로 나누어지며, 조건은 다음과 같이 나누어집니다. 1. 1이 2보다 키도 더 크고 몸무게도 많이 나가는 경우 -> 1이 우선순위 더 높음 2. 1이 2보다 키는 크나 몸무게가 적게 나가는 경우(혹은 그 반대의 경우) -> 1과 2의 우선순위 같음 이 조건을 이용하여 각 인원들을 한명씩 모두 비교하여 우선순위가 낮은 경우 해당하는 순번의 배열의 값을 1 증가 시켜주는 방식으로 풀이를 진행하면 됩니다. ex) arrcm[1] > arrcm[2] && arrkg[1]> arrkg[2] 인 경우 arr[2]의 값을 1 증가 소스코드 #include using namespace.. 2022. 6. 29.
백준 2231_분해합 [C++] 문제 풀이 이 문제는 어떤 임의의 수 n 이 주어졌을 때 n의 생성자 m (m의 분해합이 n이됨) 중 가장 작은 수를 구하는 문제이다. 여기서 분해합은 문제에도 나와있는 예시와 같이 245라는 수가 있으면 245+2+4+5 를 하여 분해합은 256이 된다. 위 분해합에서 (생성자 + 1의자리수 + 10의 자리수 + 100의 자리수) 의 방식으로 분해합을 구한다는 것을 알 수 있으며, 이 생성자가 a라고 할 때 (a%10)을 하여 1의 자리수를 구한 후 (a/10)을 하는 과정을 a가 0이 될 때까지 반복하는 규칙이 있다는 것을 알 수 있습니다. 따라서 n이라는 분해합이 주어지면 1~ (n-1) 까지 1씩 증가하며 분해합을 구하고, 분해합과 일치하는 값이 나오게 되면 해당 값을 출력하고 반복문을 끝내면 됩.. 2022. 6. 28.
백준 2798_블랙잭 [C++] 문제 풀이 이 문제는 본인이 뽑은 카드의 합이 21이 넘지 않는 선에서 카드의 합을 최대한 크게 만드는 블랙잭에서 가져온 문제로, 카드의 수 n과 임의의 수 m을 입력받은 다음, n개 만큼의 숫자를 입력받아 주어진 숫자 중 3개를 조합하여 m이 넘지않는 최대값이 얼마인지를 출력하는 문제입니다. 즉 카드 3장으로 만들 수 있는 모든 경우의 수를 비교한 후 최대값을 찾아야 하므로, 조합 가능한 경우를 모두 대입해보는 브루트포스(brute force) 를 이용하면 해결할 수 있습니다. 조금 더 자세히 설명하면 입력받은 n개의 수 중에서 card[0] + card[1] + card[2] -> card[0] + card[1] + card[3] -> card[0] + card[1] + card[4] ...... 이.. 2022. 6. 28.
백준 10872_팩토리얼 [C++] 문제 풀이 이 문제도 피보나치 수와 마찬가지로 팩토리얼에 대한 이해가 있으면 굉장히 쉽게 해결할 수 있는 문제입니다. 특정 수 n에 대한 팩토리얼은 n! 과 같이 나타내고, 이것은 n * (n-1) * (n-2) *......* 2 * 1 로 나타낼 수 있습니다. 즉 n 부터 1까지의 모든 수를 곱한 값을 출력하면 되는 문제입니다. 코드로 나타내면 아래와 같습니다. 소스코드 #include using namespace std; int factorial(int a){ int value=1; for (int i = a; i >0 ; i--) { value*= i; } if(a==0) return 1; else return value; } int main(){ int n; cin >> n; cout 2022. 6. 26.
백준 10870_피보나치 수 5 [C++] 문제 풀이 이 문제는 기존에 피보나치에 대해 알고 있다면 쉽게 해결할 수 있는 문제입니다. 피보나치 수는 첫번째와 두번째는 0과 1로 시작하여, 그 이후의 n번째의 값은 n-2와 n-1의 합, 즉 (n-2) + (n-1) 이 됩니다. 이 문제에서는 n의 값을 입력하고, n번째의 값을 출력해주는 문제로, 배열을 하나 생성하여 arr[0]=0 , arr[1]=1, 그 이후의 값은 arr[n-2] + arr[n-1] 이 되고, 최종적으로 입력받은 값 n에 대한 arr[n]의 값을 출력하면 됩니다. 코드로 작성하면 아래와 같습니다. 소스코드 #include using namespace std; int Fibonacci(int a){ int value[21]={0,}; for (int i = 0; i > n; c.. 2022. 6. 26.