일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Django
- C
- 공부블로그
- Linux
- 정보처리기사기출
- 웹개발
- 리눅스자격증
- AI
- python
- 머신러닝
- 리눅스마스터
- 리눅스마스터2급2차
- 리눅스마스터2급
- 정처기기출
- 장고
- IT
- 코딩
- IT자격증
- 정보처리기사
- 리눅스
- Java
- 리눅스명령어
- 자격증
- 정보처리기사실기
- 정처기
- 기사자격증
- 정처기실기
- 프로그래밍
- 리눅스활용
- SW
- Today
- Total
Tech Trail
[정보처리기사 실기] Java 언어 프로그래밍 특강(6) 본문
39번 문제
public class Test {
public static void main(String[] args) {
int a = 2;
int b = 2;
int c = 2;
System.out.println((a & b) > c ? 2.5 : 1);
}
}
- int a = 2;, int b = 2;, int c = 2;는 각각 정수 변수 a, b, c를 2로 초기화합니다.
- (a & b)는 a와 b를 비트 단위로 AND 연산합니다. AND 연산 결과는 2가 되므로, (a & b)는 2입니다.
- (2 > 2)는 2가 2보다 큰지 비교하는 조건문입니다. 이 비교는 거짓(false)이므로 삼항 연산자의 두 번째 피연산자인 1.0이 출력됩니다.
1.0
Java에서 정수와 실수가 혼합되면 결과는 실수가 되며, 따라서 출력 값은 1.0이 됩니다.
(2.5도 어쨌든 연산자이고 실수니까!)
40번 문제
public class Spock {
public static void main(String[] args) {
int mask = 0;
int count = 0;
if (((5 < 7) || (++count < 10)) | mask++ < 10) mask = mask + 1;
if (6 > 8 ^ false) mask = mask + 10;
if (!(mask > 1) && ++count > 1) mask = mask + 100;
System.out.println(mask + " " + count);
}
}
1. 첫 번째 조건문 ((5 < 7) || (++count < 10))에서 5 < 7가 이미 참(True)이므로 || (OR) 연산자 다음에 있는 (++count < 10)는 더 이상 평가되지 않습니다. 그러나 | 연산자는 단락 회로 평가(short-circuit evaluation)를 수행하지 않기 때문에 mask++ < 10 조건도 평가됩니다.
- mask는 현재 0이므로 mask++ < 10은 참(True)입니다. 따라서 mask는 1이 됩니다.
- ((5 < 7) || (++count < 10))와 mask++ < 10은 모두 True이기 때문에 mask=mask+1이 실행되어 mask가 2가 됩니다.
2. 두 번째 조건문 6 > 8 ^ false에서 6 > 8은 거짓(False)이고, false와 XOR(^) 연산을 하면 결과는 거짓(False)입니다. 따라서 mask=mask+10은 수행되지 않습니다.
3. 세 번째 조건문 !(mask > 1) && ++count > 1에서 mask(2) > 1은 참(True)이지만 NOT 연산 !을 통해 거짓(False)이 됩니다. 이후 && 연산자 다음에 있는 ++count > 1은 평가되지 않습니다. 따라서 mask는 2이고, count는 0이 출력됩니다.
2 0
41번 문제
public class Test1 {
public static void main(String[] args) {
int a = 1, b = 2, c = 3, d = 4;
if ((a == b) & (c++ != d) && (c++ < 6))
c++;
System.out.println(c);
}
}
- 먼저, a와 b를 비교하는 조건 (a == b)가 거짓(False)입니다. 즉, a(1)와 b(2)는 같지 않습니다.
- 이후 & 비트 연산자는 단락 회로 평가(short-circuit evaluation)를 수행하지 않는 비트 연산자이므로 다음 조건인 (c++ != d)를 확인합니다. 이 조건은 참(True)입니다. 왜냐하면 c(3)와 d(4)는 서로 다른 값이기 때문에 c는 3에서 4로 증가합니다.
- 여기서 중요한 점은 이후 && 논리 연산자가 단락 회로 평가(short-circuit evaluation)를 수행한다는 것입니다. 따라서 (c++ < 6) 조건은 확인하지 않고 건너뛰게 됩니다.
- System.out.println(c);를 통해 변수 c의 값을 출력하면 4가 출력됩니다.
4
42번 문제
public class Test {
int f(int k[]) { // k에 b가 들어가게 됨
k[1] = k[1] + 4; // k[1] = 2 + 4 = 6
return k[1] * 3; // 6 * 3 =18
}
public static void main(String[] args) {
int s;
int a = 6;
int b[] = {1, 2, 3, 4, 5};
Test t = new Test();
s = b[1] + t.f(b); // f메서드 호출 ~ 위로 ㄱㄱ
// 2 + 18 = 20
System.out.println(s);
}
}
1. int s;
: 정수형 변수 s를 선언합니다.
2. int a=6;
: 정수형 변수 a를 선언하고 6으로 초기화합니다.
3. int b[]={1, 2, 3, 4, 5};
: 정수형 배열 b를 선언하고 초기값을 주어 배열을 생성합니다.
4. Test t = new Test();
: Test 클래스의 객체 t를 생성합니다.
5. s = b[1] + t.f(b);
: 변수 s에 b[1]과 t.f(b)의 합을 대입합니다.
- b[1]은 배열 b의 두 번째 요소인 2를 나타냅니다.
- t.f(b)는 Test 클래스의 메서드 f를 호출하며, 배열 b를 매개변수로 전달합니다. 매개변수로 전달된 배열 b의 두 번째 요소인 b[1]에 4를 더하면 k[1] (메서드 내에서 k 배열은 b 배열을 가리킴)의 값은 6이 됩니다. 그리고 이 결과값에 3을 곱한 후 반환하면, 최종적으로 t.f(b)는 (2 + 4) * 3 즉, 18을 반환하게 됩니다. 이렇게 반환된 값이 b[1]과 더해져서 변수 s에 저장됩니다.
6. System.out.println(s);
: 변수 s의 값을 출력합니다. 이 때, s는 2와 18의 합인 20이므로 20이 출력됩니다.
43번 문제
public class Wind {
public static void main(String[] args) {
foreach:
for (int j = 0; j < 5; j++) {
for (int k = 0; k < 3; k++) {
System.out.print(" " + j);
if (j == 3 && k == 1)
break foreach;
if (j == 0 || j == 2)
break;
}
}
}
}
이 코드는 중첩된 반복문을 사용하여 숫자를 출력하고, 특정 조건에서 레이블을 사용하여 외부 반복문을 종료시키는 문제입니다.
- 바깥쪽 for 문은 j를 0부터 4까지 증가시키며 반복합니다.
- 안쪽 for 문은 k를 0부터 2까지 증가시키며 반복합니다.
- 각 반복에서 현재 j 값을 출력하고, 출력 결과에 공백과 함께 추가합니다.
- 이후 첫 번째 if 문에서 j가 3이고 k가 1인 경우, break foreach; 문을 통해 외부 반복문을 종료합니다. 이 경우 foreach: 레이블을 사용하여 외부 반복문을 참조합니다.
- 두 번째 if 문에서 j가 0이거나 2인 경우, break; 문을 통해 현재 내부 반복문을 종료합니다.
- 결과적으로 출력 결과는 0 1 1 1 2 3 3입니다.
0 1 1 1 2 3 3
<과정>
1. 바깥쪽 for 문 (외부 반복문) 시작:
- j는 초기에 0입니다.
안쪽 for 문 (내부 반복문) 시작:
- k는 초기에 0입니다.
System.out.print(" " + j); 문장 실행:
- 현재 j의 값인 0을 출력합니다. 출력 결과는 "0"입니다.
2. 첫 번째 if 문 체크:
- j가 3이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 0이므로 두 번째 if 문이 참(True)입니다.
- 따라서 내부 반복문(k for문)을 종료(Break)하고 j for 문으로 올라갑니다.
- j가 1이 됩니다. 다시 k가 0으로 초기화됩니다.
- j를 출력하니까 1이 출력됩니다.
3. 첫 번째 if 문 체크:
- j가 3이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 0도 아니고 2도 아니므로 두 번째 if 문 역시 건너뜁니다. k for 문으로 올라갑니다.
- k가 1이 됩니다.
- j를 출력하니까 1이 출력됩니다.
4. 첫 번째 if 문 체크:
- j가 3이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 0도 아니고 2도 아니므로 두 번째 if 문 역시 건너뜁니다. k for 문으로 올라갑니다.
- k가 2가 됩니다.
- j를 출력하니까 1이 출력됩니다.
5. 첫 번째 if 문 체크:
- j가 3이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 0도 아니고 2도 아니므로 두 번째 if 문 역시 건너뜁니다. k for 문으로 올라갑니다.
- k가 3이 됩니다.
- k<3 조건에 만족하지 않습니다. 따라서 내부 반복문을 종료하고 j for 문으로 올라갑니다.
- j가 2가 됩니다. 다시 k가 0으로 초기화됩니다.
- j를 출력하니까 2가 출력됩니다.
6. 첫 번째 if 문 체크:
- j가 3이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 2이므로 두 번째 if 문이 참(True)입니다.
- 따라서 내부 반복문(k for문)을 종료(Break)하고 j for 문으로 올라갑니다.
- j가 3이 됩니다. 다시 k가 0으로 초기화됩니다.
- j를 출력하니까 3이 출력됩니다.
7. 첫 번째 if 문 체크:
- j가 3이지만, k가 1이 아니므로 첫 번째 if 문은 건너뜁니다.
두 번째 if 문 체크:
- j가 0도 아니고 2도 아니므로 두 번째 if 문 역시 건너뜁니다. k for 문으로 올라갑니다.
- k가 1이 됩니다.
- j를 출력하니까 3이 출력됩니다.
8. 첫 번째 if 문 체크:
- j가 3, k가 1이므로 break foreach가 수행됩니다. 이중 for문을 빠져나옵니다.
💡 이 게시글은 PC 환경에 최적화하여 작성되었습니다.
💡 위 내용은 에듀윌에서 무료로 제공한 '정보처리기사 비밀 언어 특강' 문제를 직접 풀고 정리한 것입니다.
틀린 부분이 있다면 언제든 댓글 남겨주세요 :)
💡정보처리기사 실기 시험을 준비하시는 분들께는 아래 링크에서 해당 강의를 먼저 듣는 것을 권장합니다.
'IT Learning > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] Java 언어 프로그래밍 특강(8) (0) | 2023.11.17 |
---|---|
[정보처리기사 실기] Java 언어 프로그래밍 특강(7) (0) | 2023.11.16 |
[정보처리기사 실기] C언어 프로그래밍 특강(5) (2) | 2023.11.16 |
[정보처리기사 실기] C언어 프로그래밍 특강(4) (0) | 2023.11.16 |
[정보처리기사 실기] C언어 프로그래밍 특강(3) (2) | 2023.11.16 |