알고리즘42 백준 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. 백준 1011_Fly to the Alpha Centauri [C++] 문제 풀이 이 문제는 문제를 이해하는데에는 큰 시간이 걸리지 않았던 것 같은데, 풀이를 하는 과정에서 반복문을 사용할 경우 시간이 초과되는 문제가 발생해서 애를 먹었던 문제입니다. 이 문제에서 처음 이동할 수 있는 거리는 -1,0,1 이나 실질적으로 -1과 0의 거리를 이동할 일이 없기 때문에 1만큼 이동하고, 그 다음은 0,1,2 의 거리를 이동할 수 있다는 뜻입니다. 그리고 도착 직전 마지막 이동거리는 1이 되어야 하므로, 마지막 이동 직전 거리는 1또는 2라는 것을 알 수 있습니다. 이런식으로 거리에 따른 이동 수를 나타내어 규칙을 알아보겠습니다. 총 이동거리(y-x) 이동거리 이동 수 1 1 1 2 11 2 3 111 3 4 121 3 5 1211 4 6 1221 4 7 12211 5 8 1222.. 2022. 6. 25. 백준 10998_AxB [C++] 문제 소스코드 #include using namespace std; int main() { int A, B; cin >> A >> B; cout 2021. 12. 9. 이전 1 2 3 4 5 다음