반응형
#1065번_정수 3개 입력받아 짝수만 출력하기
문제 |
세 정수 a, b, c가 입력되었을 때, 짝수만 출력해보자. 참고 if(조건) { //조건이 참일 때에만 실행되는 구역(코드블록의 시작) 실행1; 실행2; ... } //코드블록의 끝 의 조건/선택 실행 구조는 주어진 “조건”을 검사해 그 결과가 참인 경우에만 코드블록 안에 작성된 내용들을 순서대로 실행한다. 예시 if(a%2==0) { printf(“%d”, a); } if(b%2==0) { printf(“%d”, b); } if(c%2==0) { printf(“%d”, c); } ** a%2==0 은 a%2가 먼저 수행되고 그 결과를 0과 비교한 참/거짓 값을 계산한다. a%2==0의 의미는 a를 2로 나눈 나머지를 0과 비교한 결과 값(참/거짓)이다. 따라서, if(a%2 == 0) 는 “a가 짝수라면?” 이라는 의미로 해석할 수 있다. |
풀이 |
간단하게 정수 3개에 대해 판별문을 작성하여 코드를 실행시켰다. for문으로 반복을 시키는 방법도 가능할 것 같다. |
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a % 2 == 0)
cout << a << endl;
if (b % 2 == 0)
cout << b << endl;
if (c % 2 == 0)
cout << c << endl;
}
#1066번_정수 3개 입력받아 짝/홀 출력하기
문제 |
세 정수 a, b, c가 입력되었을 때, 짝(even)/홀(odd)을 출력해보자. 참고 if(조건) { //코드블록1 시작 ... 실행...; ... } else { //코드블록2 시작 ... 다른실행...; ... } 의 조건/선택 실행구조는 주어진 “조건”을 검사해 참인 경우에는 코드블록1을 실행하고, 거짓인 경우에는 코드블록2를 실행한다. 예시 if(a%2==0) { printf(“even”); } else { printf(“odd”); } ** else는 if 없이 혼자 사용되지 않는다. 또한, else 다음에 조건이 없는 이유는? 참이 아니면 거짓이고, 거짓이 아니면 참이기 때문에... 즉 if문의 조건식의 판별 결과는 2가지 경우(참 또는 거짓)로 계산되는데, else 부분은 if문의 조건식의 결과가 거짓인 경우에 해당하기 때문이다. ** 실행해야 할 명령들이 여러 개일 때 코드블록 기호 { }로 묶어 주는데, 코드블록의 내용이 논리적으로 1개 단위라면 코드블록 기호를 생략할 수 있다. if(a%2==0) printf("even"); else printf("odd"); |
풀이 |
위에 문제랑 비슷한 문제인데 코드를 간소화하기 위해 변수를 배열에 저장한 뒤 for문을 통해 코드를 줄여보았다. |
#include <iostream>
using namespace std;
int main() {
int a[3];
for (int i = 0; i < 3; i++) {
cin >> a[i];
}
for (int i = 0; i < 3; i++) {
if (a[i] % 2 == 0)
cout << "even" << endl;
else
cout << "odd" << endl;
}
}
#1067번_정수 1개 입력받아 분석하기
문제 |
정수 1개가 입력되었을 때, 음(minus)/양(plus)과 짝(even)/홀(odd)을 출력해보자. 참고 조건/선택 실행 구조의 안에 조건/선택 실행 구조를 다시 "중첩"할 수 있다. 이는 "중첩(nested)"의 원리가 적용되는 내용으로 아래와 같은 구조가 가능하다. if(조건1) { if(조건2) //조건문의 중첩 { ... } else { ... } } else { if(조건2) { ... } else { ... } } 위와 같은 조건/선택 실행구조는 조건/선택 실행구조를 중첩해 서로 다른 4가지(2가지*2가지)의 경우에 대해 다른 실행을 할 수 있도록 해준다. ** 어떤 조건들이 맞았을 때에는 해당부분의 코드블록 내용만 실행되고, 전체 조건/선택 실행구조를 빠져나간다. 즉, 다른 부분들은 실행되지 않는다. ** 소스코드의 들여쓰기는 사람이 보고 이해하기 쉽도록 하는 것으로써 들여쓰기나 줄바꿈을 하지 않더라도 동일하게 컴파일된다. |
풀이 |
먼저 입력받은 수가 음수 인지 양수 인지를 판단 한 후 내부에서 홀짝을 판별하였다. |
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
if (a < 0)
{
cout << "minus" << endl;
if (a % 2 == 0)
cout << "even";
else
cout << "odd";
}
else {
cout << "plus" << endl;
if (a % 2 == 0)
cout << "even";
else
cout << "odd";
}
}
#1068번_정수 1개 입력받아 평가 출력하기
문제 |
점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자. 평가 기준 점수 범위 : 평가 90 ~ 100 : A 70 ~ 89 : B 40 ~ 69 : C 0 ~ 39 : D 로 평가되어야 한다. 참고 여러 조건들을 순서대로 비교하면서 처리하기 위해서 조건문을 중첩할 수 있다. 만약, 순서대로 검사하고 실행하기 위해 아래와 같이 중첩 시킨다면, if(조건1) { ... } else { if(조건2) { ... } else { ... } } 중첩된 구조는 논리적으로 1단위이기 때문에 코드블록 기호를 생략하면 아래와 같은 구조로 다시 표현될 수 있다. if(조건1) { ... ; } else if(조건2) { ... ; } else { ...; } 이와 같이 조건을 계속 붙여나가면.. if(조건1) { ... ; } else if(조건2) { ... ; } else if(조건3) { ... ; } else if(조건4) { ... ; } else if(조건5) { ... ; } else if(조건6) { ... ; } else if(조건...) { ... ; } else { ... ; } 위와 같은 구조를 만들어 순서대로 조건을 검사할 수 있다. 어떤 조건이 참이면, 그 부분의 내용을 실행하고 조건/선택 구조를 빠져나간다. 이렇게 조건들을 순서대로 검사할 때에는 중간에 범위가 빠지지 않았는지 꼼꼼하게 생각하고 조건들을 만드는 것이 중요하다. 이는 마치 수학에서 빠진 범위 없이 부등식을 만드는 것과 유사하다. |
풀이 |
내부에서 이중, 삼중으로 if를 사용하는 방법도 가능할 것 같으나 코드가 지저분해질 것 같아 else if를 사용하여 판별식을 작성하였다. |
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
if (a >= 90)
cout << "A";
else if (a >= 70)
cout << "B";
else if (a >= 40)
cout << "C";
else
cout << "D";
}
#1069번_평가 입력받아 다르게 출력하기
문제 |
평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자. 평가 내용 평가 : 내용 A : best!!! B : good!! C : run! D : slowly~ 나머지 문자들 : what? 참고 조건/선택문을 복합적으로 구성해 출력할 수도 있지만, switch(정수값) { case 'A': //문자 'A'가 정수값 65('A'의 아스키 값)로 저장되기 때문에 가능하다. ...; break; case 'B': ...; break; case 'C': ...; break; default: ...; } 위와 같은 switch( ) ... case... break; 제어문을 사용할 수 있다. ** break; 를 사용하지 않으면 이후의 명령들도 계속 실행된다. default: 는 제시된 case 를 제외한 나머지 모든 경우에 실행된다. switch( ) 에 주어지는 값은 “정수"값만 가능하며, 문자도 아스키코드 정수값이기 때문에 가능하다. |
풀이 |
switch문은 괄호안에 들어가는 변수의 값에따라 다른 출력을 하는 제어문이다. 해당 제어문을 통해 정수값에 따른 메시지를 출력시켰다. |
#include <iostream>
using namespace std;
int main() {
char a;
cin >> a;
switch (a) {
case'A':
cout << "best!!!";
break;
case 'B':
cout << "good!!";
break;
case 'C':
cout << "run!";
break;
case 'D':
cout << "slowly~";
break;
default:
cout << "what?";
break;
}
}
#1070번_월 입력받아 계절 출력하기
문제 |
월이 입력될 때 계절 이름이 출력되도록 해보자. 예 월 : 계절 이름 12, 1, 2 : winter 3, 4, 5 : spring 6, 7, 8 : summer 9, 10, 11 : fall 참고 swtich( ).. case ... break; 제어문에서 break;를 제거하면 멈추지 않고 다음 명령이 실행되는 특성을 이용할 수 있다. switch(a) { ... case 3: case 4: case 5: printf("spring"); break; ... } 로 작성하면, 3, 4, 5가 입력되었을 때 모두 "spring"이 출력된다. ** 12, 1, 2 는 어떻게 처리해야 할지 여러 가지로 생각해 보아야 한다. |
풀이 |
앞선 문제에서 나온 설명처럼 switch문은 break를 하지 않을 시 다음 명령으로 넘어가게 된다. 이를 사용하여 12월 1월 2월 을 하나로 묶어 winter로 출력한 뒤 break로 멈추었다. 다른 계절도 동일하게 코드를 작성하였다. |
#include <iostream>
using namespace std;
int main() {
int a;
cin >> a;
switch (a) {
case 12:
case 1:
case 2:
cout << "winter";
break;
case 3:
case 4:
case 5:
cout << "spring";
break;
case 6:
case 7:
case 8:
cout << "summer";
break;
case 9:
case 10:
case 11:
cout << "fall";
break;
}
}
#1071번_0 입력될 때까지 무한 출력하기1
문제 |
정수가 순서대로 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다. 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. while( ), for( ), do~while( ) 등의 반복문을 사용할 수 없다. 참고 goto 명령문을 사용하면 간단한 반복 실행을 만들 수 있다. 반복 실행 부분을 빠져나오기 위해(즉 무한 반복을 방지하기 위해) 반복 실행 되는 도중에 조건을 검사해야 한다. goto 이름: 이 명령은 이름: 이 작성된 곳으로 프로그램의 실행 흐름을 바꾸어 준다. "이름:" 과 같이 콜론(:)이 붙어있는 부분을 이름표(label, 레이블)라고 한다. 레이블은 특별한 선언 없이 사용할 수 있으며 언더바(_)나 영문자로 시작하면 된다. 레이블은 한 단어처럼 공백없이 모두 붙여 써야 한다. switch( ) ... case ... : ... break; 에서 case ... : 도 일종의 레이블이라고 생각할 수 있다. goto 레이블: 명령을 사용하면 반복되는 부분을 여러 개 자유롭게 만들 수 있다. goto 명령은 반복 실행을 만들어낼 수 있는 가장 간단한 명령이지만, 복잡하게(스파게티 코드) 사용하는 경우, 이해가 어렵고 오류가 생기기 쉽다. 예시 int n; reload: //레이블은 콜론(:)으로 끝내고, 일반적으로 들여쓰기를 하지 않는다. scanf("%d", &n); printf("%d", n); if(n!=0) goto reload; //reload라고 적혀있는 레이블로 실행 이동 |
풀이 |
goto를 사용해본적이 없어서 switch로 해보려했는데 생각보다 복잡해서 그냥.. goto를 쓰는게 나을 것 같다. 문제의 예시에서 나온 것과 같이 goto 명령은 (레이블 명): 으로 시작하고 원하는 명령을 작성한 후 goto (레이블 명)을 작성하면 레이블 명으로 실행을 이동한다. |
#include <iostream>
using namespace std;
int main() {
int a;
replay:
cin >> a;
if (a != 0) {
cout << a << endl;
goto replay;
}
}
반응형
'코딩해요 > C++' 카테고리의 다른 글
[프로그래머스/C++] PCCE 기출문제 (2) | 2024.10.08 |
---|---|
[프로그래머스/C++] PCCE 기출문제 1-5번 (0) | 2024.08.27 |
[코드업/C++] 기초-산술연산/1039 ~ 1046 (0) | 2023.10.07 |
[코드업/C++] 기초-입출력 풀이 (0) | 2023.09.25 |
[코드업/C++] 기초-출력/출력하기 01-07 (0) | 2023.09.18 |