목록coding test/백준 (22)
개발로그필름
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 맨 처음 알고리즘을 생각했을 때 각 자릿수를 더해야 하니까 복잡한 방법으로 숫자를 100으로 나눠서 나머지를 더한 다음에 몫에서 또 나누고... 를 반복했다 그리고 수도 1자리 2자리 3자리... 조건문으로 자리수도 다 나눠서 생각했다 정말 어리석고,,, 비효율적인 생각,,, 이번에 코드를 짜보면서 처음 알게 되었는데 각 자릿수를 더할 때 나눠서 ..
https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 맨 처음 종이에 1부터 쭉 써보니까 99 전까지는 한 자릿수 또는 두 자릿수여서 한수 범위에 모두 포함되는 것을 알았다. 그래서 세자리 수를 처음부터 써보면서 차례대로 빼 보았다. 그러기를 반복하다가 문제가 풀리지 않는 답답함을 느껴 결국 해결 방법을 찾아보고 말았다. 알고리즘 공부를 시작한지 얼마 안 돼서 이런 식으로 접근하고 알고리즘 문제의 대략적인 흐름을 파악한 뒤 며칠이 걸리더라도 보지 않고 ..
https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 알파벳의 인덱스를 어떻게 저장해야하는지 고민했다 알파벳의 아스키 코드를 아는 것이 이 문제의 핵심 포인트 같다 a의 아스키 코드는 97이라는 것을 알아두면 좋을 꺼 같다 코드 풀이 #include int main() { char str[101] = {NULL}; int alphabet[26]; scanf("%s", &str); // alphabet 배열 안을 모두 -1로 초기화 for..
https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 코드 풀이 #include #include int main() { char input[1000000]; int count[26] = { 0, }; int max; int select = 0; int result = 0; scanf("%s", input); int len = strlen(input); // 입력받은 문자열 길이 구하기 // 소문자 for (int i = 'a'; i
https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net \n를 제외한 공백 포함 문자열 입력 받는 코드 적는 방법이 scanf("%[^\n]s", input); 라는 것을 알게 되었다 문자열만 잘 입력받으면 뒤의 풀이는 쉬운 문제다 일단 공백을 찾아 count에 차례로 증가시킨 후 문제에서 앞, 뒤 공백이 있을 수 있다 했으므로 공백의 경우의 수를 차례로 정하여 코드를 짜면 된다 코드 풀이 #include #include int main(){ i..
https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 코드 풀이 #include #include int main() { int n, count = 0; char input[100]; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%s", input); count += word_count(input, strlen(input)); } printf("%d", count); ..
https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 코드 풀이 #include #include int main(void) { char input[100]; gets(input); int cnt = strlen(input); // 변경 문자에 =, -, j 가 공통적으로 있기 때문에 경우의 수를 그에 맞춰 나눠준다. for (int i = 0; i < strlen(input); i++) { if (input[i]..
https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 규칙을 찾고 나면 생각보다 너무 쉬운 문제이다 규칙을 찾기 위해 종이에 적어보았는데 2~7 : 2 8~19 : 3 20~37 : 4 38~61 : 5 위와 같은 결과가 나왔고 두 수의 차는 5, 11, 17, 23이고 차들의 차이가 6이라는 공통 수가 나왔다 코드 풀이 #include int main() { int n, i = 2, j = 5, cnt = 2; scanf("%d", &n); if (n ==..