Class 1 36

[백준 9498] 시험 성적 [C]

풀이 0~100 사이의 점수만 입력되는 친절한 문제이다. 입력된 점수를 10으로 나눈 값을 index로 활용하여 해결할 수 있다. 소스코드 #include int main(){ int grade; scanf("%d", &grade); putchar("FFFFFFDCBAA"[grade/10]); } 출처 9498번: 시험 성적 시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오. www.acmicpc.net

[백준 8958] OX퀴즈 [C]

풀이 입력받은 문자열에서 'O'이면 1 증가시킨 temp를 sum에 더해주고, 만약 'X'가 나오면 temp를 0으로 초기화해 다음 'O' 가 나올 때 다시 1부터 더해줄 수 있도록 하면 된다. C99로 컴파일하기 때문에 조건연산자 사용에 주의해야 한다. 소스코드 #include int main() { char str[80], N; scanf("%d", &N); while (N--) { int temp = 0, sum = 0; scanf("%s", &str); for (int i = 0; str[i] != '\0'; i++) (str[i] == 'O') ? sum += ++temp : (temp = 0); printf("%d\n", sum); } } 출처 8958번: OX퀴즈 "OOXXOXXOOO"와 같..

[백준 3052] 나머지 [C]

풀이 입력받은 값을 42로 나누었을 때의 나머지를 저장해두고 비교해서 서로 다른 수가 몇 개인지 찾아내는 문제이다. 최선의 경우에는 1개이지만, 최악의 경우에는 42개가 나올 수 있다. 수를 입력받고 배열의 마지막 인덱스까지 탐색 했는데 동일한 수가 없다면, 새로 등록을 해주는 형식이다. 소스코드 #include int main(){ int arr[42], num, idx = 1; for (int i = 0; i < 10; i++){ scanf("%d", &num); num %= 42; if (!i) arr[0] = num; else for (int j = 0; j < idx; j++) if (arr[j] != num && j == idx - 1){ arr[j+1] = num; idx++; }else i..

[백준 2920] 음계 [C]

풀이 항상 1부터 8까지 8개의 수가 입력되고, 오름차순 또는 내림차순으로 정렬되어있는지 아닌지를 확인하면 된다. 때문에, 반복문 내의 변수 i값의 증가를 이용해 확인할 수 있다. ascending 또는 descending라면 입력된 수들의 처음과 끝수의 합이 항상 9 이다. 1 ~ 4번째 수가 i + 1과 동일하다면, ascending이다. (5~8번째 수의 쌍은 위 조건에서 만족한다.) 처럼 풀이하는게 문제의 출제의도이나, 입력되는 수들을 하나의 문자열로 생각하면 쉽게 해결할 수 있다. ??? : 숫자가 주어진다 했지 문자열이 아니라고는 안했다. 하지만, 이 방법은 비교할 문자열을 직접 작성 또는 생성을 해야 하므로 간결하면서도 무식한 방법이라고 볼 수 있다. 만약 숫자가 1부터 100이라면? 소스코..

[백준 2884] 알람 시계 [C]

풀이 M이 45 이상일 때, 입력된 시간에서 45분만 빼면된다. M이 45 미만일 때, H가 1~24 일때 H -= 1이고, H가 0일때는 23으로 변경되어야 한다. 입력된 M의 값에 상관없이 60을 더하고 45을 뺀 값을 60으로 나누었을 때 나머지를 사용하면 짧게 표현할 수 있다. 소스코드 #include int main() { int H, M; scanf("%d %d", &H, &M); if (M < 45) H = (H != 0 ? H-1 : 23); printf("%d %d", H, (M+15) % 60); } 출처 2884번: 알람 시계 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모..

[백준 2753] 윤년 [C]

풀이 윤년일 조건은 다음과 같다. year % 4 == 0 && year % 100 != 0 year % 400 == 0 윤년인지 아닌지의 조건에 따라 1(True), 0(False)를 출력하면 된다. &&와 || 는 우선 연산에 따라 계산되므로 따로 괄호를 할 필요는 없다. 소스코드 #include int main() { int year; scanf("%d", &year); printf("%d", !(year%4) && year%100 || !(year%400)); } 출처 2753번: 윤년 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 ww..