본문 바로가기

분류 전체보기234

[알고리즘 6.2.7] 문자열 - 문자열 압축 문제 문자열의 길이가 굉장히 길 경우, 이를 압축하여 짧게 만들어야 할 때가 종종 있다. 이 문제에서는 문자열이 주어졌을 때, 다음과 같은 방법으로 압축한 결과를 출력하는 프로그램을 작성한다. 예를 들어, 문자열이 AAABBBBBCCCCDDDDEFFF 라고 하자. 이 문자열을 압축하면, 연속으로 같은 문자가 나오는 부분에, 그 문자가 몇번 나왔는지를 적어줌으로써 압축한다. 즉, 이 문자열은 3A5B4C4DE3F 로 압축된다. E는 1개밖에 없기 때문에 따로 1을 적어주지 않는다. 입력 첫 번째 줄에 압축하고자 하는 문자열이 주어진다. 문자열의 길이는 1000보다 작다. 문자열에 구성된 알파벳은 대문자다. 출력 문자열을 압축한 결과를 출력한다. 예제 입력 AAABBBBBCCCCDDDDEFFF 예제 출력 3.. 2019. 4. 25.
[알고리즘 6.2.6] 문자열 - 팰린드롬 조사 문제 문자열이 주어질 때, 이것이 팰린드롬인지 조사하는 프로그램을 작성하시오. 팰린드롬이란, 앞으로 읽을 때와 뒤로 읽을 때의 결과가 같은 문자열을 말한다. 입력 첫 번째 줄에 문자열이 주어진다. ( 1 ≤ 문자열의 길이 ≤ 1,000 ) 출력 입력된 문자열이 팰린드롬이면 YES, 아니면 NO를 출력한다. 예제 입력 abcba 예제 출력 YES 예제 입력 abcbd 예제 출력 NO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include #include int main() { char arr[1005]; fgets(arr, 1005, stdin); int arrLen = strlen(arr); int arrDiv = arr.. 2019. 4. 25.
[알고리즘 6.2.5] 문자열 - 문자열 포함관계 조사 문제 문자열 A와 B가 주어질 때, 문자열 B가 문자열 A에 포함되어 있는지를 조사하는 프로그램을 작성하시오. 단, 문자열 A와 B에는 알파벳으로만 이루어져 있으며, 공백은 포함되지 않는다고 가정한다. 입력 첫 번째 줄에 문자열 A, 두 번째줄에 문자열 B가 주어진다. 각각의 길이는 1,000을 넘지 않는다. 출력 문자열 B가 문자열 A에 포함되면 YES, 아니면 NO를 출력한다. 예제 입력 Watermelon melon 예제 출력 YES 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include #include int main() { char arr.. 2019. 4. 25.
[알고리즘 6.2.4] 문자열 - 문자열 정렬 문제 n개의 문자열이 주어질 때, 이 문자열을 사전순으로 빠른 순서대로 정렬하는 프로그램을 작성하시오. 입력 첫 번째 줄에 문자열의 개수 n이 주어진다 ( 1 ≤ n ≤ 100 ) 그 후 n개의 줄에 대하여 정렬하고자 하는 문자열이 주어진다 ( 1 ≤ 문자열의 길이 ≤ 100 ) 출력 문자열을 사전순으로 빠른 순서대로 정렬한 결과를 출력한다. 예제 입력 9 acid apple banana acquire cat crop crab power cat 예제 출력 acid acquire apple banana cat cat crab crop power 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3.. 2019. 4. 25.
[알고리즘 6.2.3] 문자열 - 문자열 뒤집기 문제 문자열이 주어질 때, 이를 뒤집어서 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에 문자열이 주어진다. ( 1 ≤ 문자열의 길이 ≤ 1,000 ) 출력 문자열을 뒤집은 결과를 출력한다. 예제 입력 Hello World! 예제 출력 !dlroW olleH 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include #include int main() { char arr[1500]; fgets(arr, 1500, stdin); int su = strlen(arr); for(int i=su-1; i>=0; i--){ printf("%c",arr[i]); } return 0; } 2019. 4. 25.
[알고리즘 6.2.2] 문자열 - 과제물 망치기 문제 철수는 영희를 괴롭히는 것을 매우 좋아한다. 오늘도 철수는 영희를 어떻게 괴롭힐지 고민을 하다가, 영희가 최근에 작성하고 있던 문서가 떠올랐다. 이에 철수는 영희의 문서를 망쳐놓기로 결심한다. 바로 띄어쓰기를 모두 제거해버리는 것이다. 영희의 문서를 확인한 철수는, 띄어쓰기가 너무 많아 직접 모두 제거할 수는 없다는 것을 깨닫고 도움을 요청했다. 영희의 문서가 주어질 때, 띄어쓰기를 모두 제거하는 프로그램을 작성하시오. 입력 첫째 줄에 영희의 문서가 주어진다. 영희의 문서는 한 줄 짜리 문자열이며, 문서의 길이는 100,000을 넘지 않는다. 출력 문자열의 띄어쓰기를 모두 제거한 결과를 출력한다. 예제 입력 Please do not touch anything 예제 출력 Pleasedonottouch.. 2019. 4. 25.
[알고리즘 6.2.1] 문자열 - 대소문자 변환 문제 문자열이 주어질 때, 대문자는 소문자로, 소문자는 대문자로 바꾸는 프로그램을 작성하시오. 알파벳이 아닌 문자는 그대로 유지한다. 입력 첫 번째 줄에 문자열이 주어진다. ( 1 ≤ 문자열의 길이 ≤ 1,000 ) 출력 문자열 내의 대문자는 소문자로, 소문자는 대문자로 바꾼 결과를 출력한다. 예제 입력 hELLO wORLD! 예제 출력 Hello World! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #include int main() { char arr[1000]; fgets(arr,1000,stdin); //65~90 대문자 //97~122 소문자 int su = strlen(arr); for(int i=0; i=.. 2019. 4. 25.
[알고리즘 6.1.1] 문자 - 계산기 문제 덧셈, 뺄셈, 곱셈, 나눗셈을 할 수 있는 계산기 프로그램을 만드세요. 입력 첫째 줄에는 숫자 a가 입력되고, 둘째 줄에는 +, -, /, * 연산자가 입력된다. 마지막 줄에는 숫자 b가 입력된다. 출력 a와 b를 주어진 연산자를 활용하여 연산한 결과를 출력해라. 예제 입력 5 + 5 예제 출력 10 예제 입력 5 - 12 예제 출력 -7 예제 입력 2 * 105 예제 출력 210 예제 입력 125 / 5 예제 출력 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include int main() { int su1, su2; char mun; scanf("%d %c %d",&su1, &mun, &su2); if(mun == '+'){ print.. 2019. 4. 25.
[알고리즘 8.1.5] 재귀함수 - inequal 문제 부등호 기호 앞뒤에 넣을 수 있는 숫자는 0부터 9까지의 정수이며 선택된 숫자는 모두 달라야 한다. 아래는 부등호 순서열 A를 만족시키는 한 예이다. 3 1 7 0 이 상황에서 부등호 기호를 제거한 뒤, 숫자를 모두 붙이면 하나의 수를 만들 수 있는데 이 수를 주어진 부등호 관계를 만족시키는 정수라고 한다. 그런데 주어진 부등호 관계를 만족하는 정수는 하나 이상 존재한다. 예를 들어 3456128790 뿐만 아니라 5689023174도 아래와 같이 부등호 관계 A를 만족시킨다. 5 0 1 4 여러분은 제시된 k 개의 부등호 순서를 만족하는 (k+1) 자리의 정수 중에서 최대값과 최소값을 찾아야.. 2019. 4. 25.
[알고리즘 8.1.4] 재귀함수 - dessert 문제 농부 존은 소들의 저녁식사 줄 세우는 새로운 방법을 개발 했다. N(1~15)마리의 소들을 순서대로 세 워놓은 후, 각 소들 사이에 +, - , . 셋 중 1가지가 써져있는 냅킨을 배치해서 최종 결과가 0 이 되게 해야 하는 것이다. 점(.)이 써져있는 냅킨을 통해 더 큰 수를 만들 수 있게 된다. 아래와 같은 경우를 보자. (ps .이 써져있는 냅킨은 '공백'이라고 생각하면 된다.) 1-2.3-4.5+6.7 이와 같은 배치는 1-23-45+67 을 나타낸다. 결과는 0 이다. 10.11은 1011 로 해석된다. 입력 첫 째 줄에는 소들의 수 N(1 ≤ N ≤ 15)이 입력된다. 출력 처음 20줄에 대해 가능한 20가지 답을 출력하는데, 사전 순으로 앞선 것을 출력한다. 순서는 +가 가장 앞서고 -.. 2019. 4. 25.
[알고리즘 8.1.3] 재귀함수 - division 문제 임의의 자연수는 그보다 작은 자연수들의 합으로 표현될 수 있다. 예를 들어 4의 경우, 4 = 3+1 = 2+2 = 2+1+1 = 1+1+1+1 위와 같은 방법으로 표현 될 수 있다. 이 때 , 숫자의 구성이 같으면서 그 순서만이 다른 경우는 같은 경우로 생각하는데, 예를 들어 다음 세 가지 경우는 모두 같은 경우이다. 2 + 1 + 1, 1 + 2 + 1 , 1 + 1 + 2 자연수 n을 입력 받아 이를 n보다 작은 자연수들의 합으로 나타내는 방법을 모두 출력하는 프로그램을 재귀 호출을 사용하여 작성하시오. 입력 첫 줄에 2 이상 20 이하의 자연수 n이 주어진다. 출력 첫째 줄부터 모든 방법을 한 줄에 하나씩 출력한다. 하나의 식 안에는 큰 숫자가 앞으로 오도록 하고, 전체적으로는 앞의 숫자가 .. 2019. 4. 25.
[알고리즘 8.1.2] 재귀함수 - tobin 문제 두 정수 n, k를 입력받아 k개의 1을 가진 n자리 이진 패턴을 출력하는 프로그램을 작성하세요. 입력 두 정수 n, k가 입력으로 주어진다. ( 0 < n =n){ if(y==r){ for(int i=0; i 2019. 4. 25.
[알고리즘 8.1.1] 재귀함수 - 순열 구하기 문제 서로 다른 n개의 원소들 중에서 r개만을 뽑아 일렬로 나열하는 것을 순열이라 한다. 예를 들어, 3개의 원소 a, b, c 중에서 2개만을 뽑아 나열하면 ab, ac, ba, bc, ca, cb 의 6가지 경우가 있다. n과 r이 주어질 때, n개의 소문자 중에서 r개만을 뽑아 나열하는 모든 경우를 출력하는 프로그램을 작성하시오. 단, a부터 시작하여 연속으로 n개의 알파벳을 갖고 있다고 하자. 입력 첫 번째 줄에 n과 r이 주어진다. ( 1 ≤ n ≤ 10, 0 ≤ r ≤ min(n, 7) ) 출력 각 줄에 n개의 소문자 중에서 r개만을 뽑아 나열하는 경우를 사전순으로 나열한 결과를 출력한다. 예제 입력 4 2 예제 출력 ab ac ad ba bc bd ca cb cd da db dc 1 2 3 .. 2019. 4. 25.
[알고리즘 7.1.3] 재귀함수 - mountain 문제 봉우리가 여러개인 산 모양을 출력한다. 산 모양은 그림과 같고 좌우 대칭이다. 입력 첫 번째 줄에 숫자를 입력 받는다. 숫자의 크기는 20보다 작은 자연수이다. 출력 출력 예의 형식으로 출력한다. 예제 입력 3 예제 출력 1213121 예제 입력 5 예제 출력 1213121412131215121312141213121 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include void mon(int n){ if(n==1){ printf("1"); }else{ mon(n-1); printf("%d",n); mon(n-1); } } int main() { int n; scanf("%d",&n); mon(n); return 0; } 2019. 4. 25.
[알고리즘 7.1.2] 재귀함수 - binary 문제 숫자를 입력 받아 이진수로 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에 숫자를 입력 받는다. 숫자의 크기는 1,000보다 작거나 같다. 출력 첫째 줄에 숫자를 이진수로 바꾸어 출력한다. 예제 입력 14 예제 출력 1110 예제 입력 31 예제 출력 11111 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include void binary(int a){ if(a==0) printf("0"); else if(a==1) printf("1"); else{ binary(a/2); printf("%d",a%2); } } int main() { int n; scanf("%d",&n); binary(n); return 0; } 2019. 4. 25.