전체 글

· PS/BOJ
1. 문제 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 2. 접근 ' ' 단위로 구분해 배열에 입력받는다. 문자열의 첫번째 혹은 마지막에 공백이 있는지 확인한다. 3. 문제풀이 #define _CRT_SECURE_NO_WARNINGS #include #include char a[1000005]; int main() { int ans = 0; scanf("%[^\n]s", a); // 공백이 나올 때까지 입력받음 if (a[0] != '..
스터디 과제를 하던 중 알게 된 것을 정리했다. scanf로 문자열을 입력받는 방법들이다. ⓐ 일반적인 입력 char str[100] scanf("%s", &str); 👉 str에 공백 혹은 엔터가 있을 때까지 입력받기 ⓑ 공백을 포함한 문자열 scanf("%[^\n]s", &str); 공백을 포함해 입력받기를 원하는 경우, gets나 fgets도 사용하지만 scanf로도 구현가능 👉 [] 안의 문자를 받을 때까지 입력을 받음 예를 들어, '*'이 나올 때까지 입력을 받는 경우라면, scanf("%[^*]s", &str); 로 표현할 수 있다. 그렇다면, [] 안의 문자를 제외하고 읽을 수는 없을까? scanf("%[^*]%*c", &str); '*c'는 [] 안의 문자를 제거하고 읽는다. 이 코드는 '..
1. 해쉬테이블- dynamic set을 구현하는 효과적 방법 중 하나- 평균 탐색, 삽입, 삭제 시간은 O(1)- 최악의 경우 Θ(n)- 해쉬함수 h를 이용해 키 k를 T[h(k)]에 저장- h : U -> {0, 1, ..., m-1} (m : 테이블 크기, U : 모든 가능한 키들의 집합)- 하나의 slot 혹은 bucket으로 사상됨- 즉, 각 키는 0 ~ m-1의 정수로 mapping  2. 해쉬 함수의 예- 모든 키를 자연수로 가정예1) 문자열ASCII 코드 : C = 67, L = 76, R = 82, S = 83CLRS = (67 * 128^3) + (76 * 128^2) + (82 * 128^1) + 83 * (128^0) 예2) h(k) = k % m : key를 m으로 나눈 나머지  ..
· PS/BOJ
1. 문제 https://www.acmicpc.net/problem/1978 1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 2. 접근 #include int main() { /* 입력 받을 소수의 개수를 N으로 받음 */ /* N개의 소수를 받음 */ /* 소수 판단 */ return 0; } 3. 문제풀이 #define _CRT_SECURE_NO_WARNINGS #include int main() { int N, str[100], cnt=0; scanf("%d", &N); for (int i = 0; i < N; i++) { // N개의 소수를 배열에 저장 scanf("%d..
· PS/BOJ
1. 문제 2. 최종답안 #include int main() { int x, y; scanf("%d", &x); scanf("%d", &y); if (x > 0 && y > 0) printf("1"); else if (x 0) printf("2"); else if (x < 0 && y < 0) printf("3"); else printf("4"); return 0; }
· PS/BOJ
1. 문제 문제 이해 윤년이란? 4년에 한 번씩 찾아오는 2월이 29일인 해 -> 4의 배수이면서 100의 배수가 아니거나 400의 배수일 때 3. 최종 답안 #define _CRT_SECURE_NO_WARNINGS #include int main() { int year; scanf("%d", &year); if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) printf("1"); else printf("0"); }
· PS/BOJ
1. 문제 2. 문제 이해 입력 : 26 2+6 = 8 -> 68 6+8 = 14 -> 84 8+4 = 12 -> 42 4+2 = 6 -> 26 출력 : 4 앞의 수의 1의 자리수가 다음 수의 10의 자리수가 되며, 앞의 자리 수 각각을 더한 값의 1의 자리수가 다음 수의 1의 자리가 된다. 3. 접근 N의 10의 자리수와 1의 자리수를 더해 return 하는 방식으로 코드를 짰더니 8번이나 넘는 오답이 발생해 다시 보니 문제를 잘못 이해했었다. #include int main() { int N, a, b, num, cnt=0; scanf_s("%d", &N); a = N / 10; // N의 10의 자리 b = N % 10; // N의 1의 자리 while(1) { num = 10 * b + (a + ..
소-은
남소금