PS 639

[백준 2164] 카드2 [C]

풀이 본래 Queue를 이용해 푸는 문제지만, 다음과 같은 규칙성이 존재해 간단하게 풀이했다. N이 1일때, 결과가 1이다. N >= 2 일때, N에서 N보다 작은 2의 제곱을 뺀 값에 2를 곱해준 값이 결과와 일치한다. 65~128까지의 N은 N보다 작은 2의 배수인 64를 뺀 값에 2배를 곱하여 출력할 것이다. 129 ~ 256의 N또한 마찬가지로 N보다 작은 2의 배수인 128를 뺀 값에 2배를 곱하여 출력할 것이다. 소스코드 #include int main(){ int N, sq = 1; scanf("%d", &N); for (; sq

[백준 10814] 나이순 정렬 [C]

풀이 나이와 이름을 등록할 수 있는 구조체를 만들어 사용하자. 나이가 같을 경우 등록된 순서대로 출력을 해주어야 하기 때문에 다음과 같은 방법을 생각해 볼 수 있다. 구조체 내부에 order변수를 선언해서 등록 순서를 입력 조금은 복잡하지만 구조체 배열의 인덱스를 활용하여 메모리를 절약 등록순서 1 2 3 4 5 6 7 " " 나이 20 21 20 23 21 20 23 " " 하지만, 나이를 고려하지 않을 경우 이미 등록 순서는 오름차순으로 정렬되있다, 때문에 추가로 정렬을 해주지 않고, 가장 적은 나이에서 가장 많은 나이까지 분류를 하여 출력해주는 방식으로 해결했다. 등록순서 1 3 6 나이 20 20 20 등록순서 2 5 나이 21 21 등록순서 4 7 나이 23 23 소스코드 #include #in..

[백준 10818] 최소, 최대 [C]

풀이 N개의 정수를 전부 저장할 필요 없이 입력받은 직후 최솟값인지, 최댓값인지 구분해 해결할 수 있다. 소스코드 #include int main() { int N, num, max, min; scanf("%d", &N); for (int i = 0; i max) max = num; } printf("%d %d", min, max); } 출처 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 ..

[백준 10809] 알파벳 찾기 [C]

풀이 모두 소문자만 입력된다는 점을 index로 이용하면 된다. str[i] 'a' 'b' " " 'y' 'z' str[i] - 'a' 0 1 " " 24 25 str[i] - 'a' 를 index로 활용하여, 각 알파벳에 맞는 배열의 값에 처음으로 등장하는 위치(값)을 입력해주면 된다. 단, 중복해서 값이 들어가는 것을 방지하기 위해 배열의 요소 값이 0(초기값)일 때만 입력하도록 한다. 소스코드 #include int main(){ char str[101], cnt[26] = { 0, }; scanf("%s", str); for (int i = 0; str[i] != '\0'; i++) if (!cnt[str[i] - 'a']) cnt[str[i] - 'a'] = i + 1; for (int i = ..

[백준 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