https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 www.acmicpc.net 공백을 포함한 문자열에서 단어의 개수를 세는 문제. 공백을 기준으로 판단하면 편하지만, 앞 뒤에 나오는 공백을 피해야 한다. 공백을 포함한 문자를 입력받으려면 scanf("%[^\n]", 문자열), 또는 gets(문자열), fgets(문자열, 길이, stdin)을 사용하면 된다. 하지만 gets의 경우 버전에 따라 사용이 불가능할 수 있으므로 잘 체크하자. 필자는 이 gets를 사용하다가 컴파..
https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 입력받은 알파벳 문자열에서 대소문자 상관없이 가장 많이 나온 문자를 찾는 문제. 문제를 풀기위해 아스키코드로 접근하였다. 먼저 아스키 코드값을 알아보자. #include int main(){ printf("%d\n%d", 'A' , 'a'); } A의 아스키코드는 65이고 a의 아스키코드는 97로 나온다. 따라서 A~Z의 아스키코드는 65~90이고, a~z의 아스키코드는 97~122임을 알 수 있다. 이를 이용하여 다음과 같이 풀..
https://www.acmicpc.net/problem/2675 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 입력받은 문자열은 입력받은 정수번 반복하여 출력하는 문제. 만약 3과 ABC가 입력되었다면 AAABBBCCC라는 문자열을 만들어 출력한다. 각 문자열에 접근해 R번 반복하고자 하지만, 아직 해결하지 못했다. 2021.08.09 현재 풀이 #include #include int main(){ int T, R; // 테스트 케이스, 반복 횟수 char S[21]; // 입력받는 문자열 // ..
https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 입력받은 알파벳의 배열에서 각 알파벳이 처음으로 등장하는 위치를 출력하는 문제. 이전에 푼 실버티어의 15596번이나 4673번이랑 동급, 혹은 그 이상으로 어려웠다. 각설하고, 맨 처음에는 배열에 한 글자씩 접근해서 26개의 조건문을 쓰려고 했다가, 그런 의도로 낸 문제는 아닌 것 같아 다른 방법을 생각해보았다. 답은 같은 단계별 문제 풀이에서 아스키코드 문제와 (https://ww..
https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 각 자리수가 등차수열을 이루는 한수에 관한 문제. 무작정 판단하기 보다는 숫자 범위를 정하여 한수를 판단했다. 일단 100미만의 자연수는 무조건 등차수열이 될 수 밖에 없다. (동시에 등비수열도 가능하겠다.) 그러므로 100미만의 값이 들어오는 경우는 그 숫자만큼 한수가 존재하므로 이때는 그 수를 return하면 된다. 세자리수중에서 100~110의 범위에서도 한수는 없다. 어떤 방식으로 해도 등차수..
https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 실버티어 문제로 넘어오면서 머리가 정말 아프다;; 각설하고, 이번 문제는 어느 수학자가 정의한 셀프넘버에 관한 문제이다. n이라는 자연수에 대해 자기자신과 자기자신의 자리수를 합하는 함수 d(n)이라고 하자(이때의 n을 생성자라고 한다). d(75) = 75+7+5 = 87이 된다. 또한 셀프 넘버는 d(n)을 통해 나올 수 없는, 즉 생성자가 없..
https://www.acmicpc.net/problem/15596 15596번: 정수 N개의 합 C++17, Java 8, Python 3, C11, PyPy3, C99, C++98, C++11, C++14, Python 2, PyPy2, Go, C99 (Clang), C++98 (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang) www.acmicpc.net N개의 정수의 합을 구하는 함수를 구현하는 문제. 주어진 함수의 조건들을 충족하면 된다. #include long long sum(int *a, int n){ long long total = 0; for (int i=0; i
https://www.acmicpc.net/problem/4344 4344번: 평균은 넘겠지 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. www.acmicpc.net 입력받은 숫자의 분포중에서 평균보다 높은 비율을 구하는 문제. 입력받은 숫자들을 평균을 낸 후에 평균 이상인 숫자들의 비율을 구하면 끝난다. #include int main(){ int c, n, cnt; // 테스트케이스, 학생 수, 평균 넘은 사람 double avg; // 평균 scanf("%d", &c); //테스트 케이스 입력 for (int i = 0; i < c; i++) { avg = 0; // 평균과 평균 넘은사람 초기화 cnt = 0; scanf("%d",..