2, 3강 과제 정답
2강 문제
아스키 코드
문자도 숫자로 다루어진다는 것을 이해하는 문제입니다
스타워즈 로고
알고리즘 문제를 풀 때는 주어진 문제의 출력 형식을 정확하게 맞춰줘야 합니다.
따라서 문제의 출력 형식을 복사-붙여넣기로 맞춰주는 것이 좋습니다.
We love krill
나부 함대 데이터
개
printf 내부에서 "와 \는 특별한 의미를 가지기 때문에 이 문자들을 출력하기 위해서는 \를 붙여줘야 합니다.
고양이
콜센터
A+B
간단히 연산자를 사용해보는 문제입니다.
A-B
AxB
A/B
사칙연산
나머지
나머지 연산의 속성을 묻는 문제입니다.
제리와 톰
간단히 변수와 연산자를 활용하여 실생활의 문제를 푸는 문제입니다.
N찍기
반복문과 반복문 변수를 활용하는 문제입니다.
```c
include
int main()
{
int n;
scanf("%d", &n)
for (int i = 0; i < n; i++)
{
}
}
Hello Judge
위 문제와 같습니다.
합
합을 저장할 변수를 만들고 반복문을 통해 합을 구합니다.
사실 등차수열의 합 공식을 쓰면 간단히 풀 수 있습니다.
구구단
숫자의 합
숫자의 개수가 최대 100개입니다. 따라서 최대 100자리의 숫자를 입력받아야 한다는 뜻입니다.
C언어에서 100자리의 숫자를 숫자로 저장할 수 있는 방법이 없습니다.
scanf의 서식문자중 %1d를 활용하여 '한자리'씩만 입력받아 합을 더해가는 방법이 있습니다.
또는 연속된 숫자들을 문자로 취급하여 저장한 뒤 합을 더해가는 방법이 있습니다.
0 = not cute / 1 = cute
정말 다양한 풀이가 있을 수 있습니다.
반복문과 변수를 적절히 사용하여 푸는 문제입니다.
조금더 줄일 수 있습니다.
X보다 작은 수
알고리즘 문제의 채점은 출력값만 보기 때문에 반복문을 도는 도중에 출력해도 됩니다.
시험 성적
조건문의 구조를 이용하는 문제입니다.
세 수
조건문을 통해 경우의 수를 나눠서 문제를 풉니다.
최댓값
최댓값을 구하기 위해서는 최댓값을 저장할 변수를 만들고 주어진 자료들을 전부 검사해야 합니다.
최소, 최대
최댓값, 최솟값의 초기값은 주어진 자료의 최솟값, 최댓값으로 설정하거나 주어진 자료중 하나를 임의로 선택하여 초기값으로 지정해주는 방법이 있습니다.
최대공약수와 최소공배수
최대공약수를 구하는 방법은 두 수와 동시에 나누어 떨어지는 수를 반복문을 통해 찾는 방법이 있고 유클리드 호제법이라는 방법을 통해 찾을 수 있습니다.
반복문 이용
유클리드 호제법 이용
팩토리얼
합을 구하는 문제와 비슷하지만 0!=1 임을 조심해야 합니다.
2의 제곱인가?
이 문제는 정말 다양한 풀이가 있습니다.
2로 계속 나누다가 나머지가 있다면 2의 제곱이 아님
2의 제곱수를 만들어가다가 입력값보다 커지면 제곱수 아님 일치하면 2의 제곱수
컴퓨터공학에서 2는 특별한 수 입니다. 컴퓨터는 숫자들을 2진수로 저장합니다. 따라서 2진수의 성질을 이용해서 풀 수 있습니다.
2의 제곱수는 이진수로 나타내면 모두 100 1000 10000 의 형태를 가집니다. 따라서 2의 제곱수&2의 제곱수-1 을 하면 100 & 011 = 0 이런 식으로 모두 0이 됩니다.
별찍기 - 1
중첩 반복문을 사용하는 문제입니다.
히스토그램
수를 입력받고 그만큼 출력합니다.
3강 문제
수 뒤집기
수를 뒤집는 테크닉과 변수를 활용하는 조금 복잡한 문제입니다. 함수를 활용하면 더 편하게 풀 수 있습니다.
변수의 이름을 헷갈리게 지으면 안되고 초기화를 꼭 잘 해줘야 합니다.
함수 활용
이진수
10진수를 2진수로 변환하는 과정을 이해하면 풀기 쉽습니다.
A+B-3
단순 반복문 문제입니다.
짝수를 찾아라
중첩 반복문 + 변수 활용
별 찍기 - 2
별도 찍고 공백도 찍어야 합니다.
별찍기 - 5
별을 찍기 위해 반복을 몇 번 해야하는지 잘 생각해야 합니다.
숫자의 개수
%연산자를 이용해 숫자를 한자리씩 다룰 수 있습니다.
배열을 활용해 연속된 정보를 저장합니다.
음계
배열의 오름차순, 내림차순을 검사하는 테크닉이 필요합니다.
피보나치 수 5
배열을 이용해서 피보나치의 값을 저장하고 이전에 저장한 값을 활용하여 나머지 값을 계산합니다.
수 정렬하기
배열을 정렬하는 여러 방법이 있습니다.
버블소트를 이용해 문제를 풀 수 있습니다. 버블소트는 모든 수를 서로 비교해서 정렬하는 방법입니다.
열 개씩 끊어 출력하기
문자열을 받고 문자열을 순회하면서 한문자씩 출력하고 10개를 출력했을 때 줄바꿈을 출력합니다.
strlen() 함수는 문자열의 길이만큼 시간이 걸리기 때문에 반복문 내부에 넣으면 안됩니다.
문자열 반복
문자열을 받고 문자열을 순회하면서 한 문자를 반복문을 통해 여러번 출력합니다.
그대로 출력하기
서식문자 "%"를 이용해서 한 줄을 전부 입력받습니다.
"%"는 줄바꿈을 입력받지 않기 때문에 버퍼에 줄바꿈을 남김니다. 따라서 getchar()를 통해 줄바꿈을 버퍼에서 입력받아서 없애줘야 합니다.
알파벳 찾기
문자열을 입력받고 순회하면서 처음 나온 알파벳의 위치를 배열에 저장합니다.
IBM 빼기 1
문자열을 입력받고 순회하면서 문자에 1을 더한 뒤 출력합니다. 만약 문자가 Z라면 A로 출력합니다
OX퀴즈
변수를 잘 활용해야 하는 문제입니다.
OX를 문자열로 받고 순회하면서 O가 등장할 때마다 카운트를 해줍니다.
단어 공부
대소문자 구분 없이 알파벳의 개수를 세고 최댓값과 그 위치를 찾아야 하는 문제입니다. 조금 복잡할 수 있습니다.
!밀비 급일
서식문자 "%"를 이용해서 한 줄을 전부 입력받습니다. 그다음 문자열을 거꾸로 순회하면서 출력해주면 됩니다. 또는 배열 뒤집기를 쓸 수도 있습니다.
getchar를 해주는 것을 잊지 말아야 합니다.
팰린드롬
서식문자 "%"를 이용해서 한 줄을 전부 입력받습니다. 반복문을 통해 문자열의 앞과 뒤가 계속해서 일치하는지 검사하면 됩니다. 대소문자를 구분하지 않기 때문에 대문자는 소문자로 바꿔주거나 소문자를 대문자로 바꿔줍시다.
주의할 점은 scanf("%d")를 쓸 때도 버퍼에 줄바꿈이 남기 때문에 getchar를 써줘야 합니다.
Last updated
Was this helpful?