구현 156

[백준 1157] 단어공부 [C]

풀이 입력받은 문자열을 모두 대문자 or 소문자로 바꾸고 아스키코드 값을 이용해서 구하는 방법과, 입력받은 문자열을 수정하지 않고, 아스키코드 값만을 이용하여 구하는 방법이 있다. 먼저 후자의 방법의 경우 idx = (str[i] - 'A') % 32; alphabet[idx]++; 처럼 만약 소문자 'b'(98)를 입력받으면 ( 'b'(98) - 'A'(65) ) % 32 = 1 이므로 alphabet[1]++; 이 된다. 하지만, 제출결과는 틀린것으로 나온다. 위 코드의 문제점이라면, str[i] - 'A' 값이 26~31 사이의 값이 나오는 경우이다. 이러한 값이 나오기 위해서는 알파벳 대/소문자가 아닌 다른 값이 입력되는 경우로, 제시된 입력 형식과 맞지않는다. 아니 이런 문제 오류는 언제고쳐? ..

[백준 1152] 단어의 개수 [C]

풀이 다른 언어에 비해 문자열에 관한 문제는 문제의 난이도에 비해 C로 풀이하기 힘든만큼 꼭 C를 고집할 필요는 없다. C언어로는 단어의 개수를 세는 방식이 아닌, 공백의 개수를 세고, 경우의 수를 따지는 방식이 더 효율적인 듯 하다. 엔터를 입력할 때 까지 계속 입력받는다. 공백 하나만 입력되는 경우도 고려해야한다. 마지막 단어 뒤에 공백이 있거나 없을 수 있어서 len - 1로 맨 끝의 공백이나, 단어의 맨 뒤를 고려하지 않는다. 소스코드 #include #include int main(){ char str[1000001]; gets(str); int cnt = 0, len = strlen(str); if (len == 1 && str[0] == ' '){ cnt = -1; }else for(int ..

[백준 1008] A/B [C]

풀이 절대오차 또는 상대오차가 10의 -9승이하만 정답이므로 소수점 9번째 자리까지만 출력해도 정답으로 인정된다. double형을 사용해서 큰 숫자를 계산할 수 있도록 하자 소스코드 #include int main() { double A, B; scanf("%lf %lf", &A, &B); printf("%.9lf", A/B); } 출처 1008번: A/B 두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오. www.acmicpc.net

[백준 10250] ACM 호텔 [C]

풀이 반복문을 두 개 사용할 때, W를 이용해서 방 번호를 알아낼 수 있지만. N의 범위는 H * W이하이고, N을 H로 나눌때의 몫과 나머지를 이용하므로 간단하게 해결할 수 있다. "%d0%d" 형식으로는 오답 처리 된다. 전부 숫자로 출력해주자. N%H == 0일 때는 층 수랑 방 수에 대한 계산을 다르게 구해야 한다. 소스코드 #include int main(){ int T, H, W, N; scanf("%d", &T); while (T--){ scanf("%d %d %d", &H, &W, &N); if (!(N%H)) printf("%d%02d\n", H, N/H); else printf("%d%02d\n", N%H, N/H+1); } } 출처 10250번: ACM 호텔 프로그램은 표준 입력에서 ..