혼공학습단 12기는 7/01일부터 8/18일까지 진행하는 스터디 활동입니다.
★ 이번주 공부할 내용
# | 진도 | 기본 숙제(필수) | 추가 숙제(선택) |
2주차 (7/8 ~ 7/14) |
Chapter 04 ~ 05 | p.142 직접 해보는 손코딩(switch문) 실행 후 결과 화면 캡쳐하기 | p.202 05-2 확인 문제 6번 풀고 정리하기 |
🙋♂️Q&A: 신용권 저자님의 네이버 카페
💻유튜브 강의: 👉전체 강의 목록
이번주 공부할 내용
· Chaper 04 조건문과 반복문
· Chaper 05 참조 타입
파트입니다!!
■ 기본 숙제
Switch문 소스 코드
public class SwitchExample {
public static void main(String[] args) {
// 주사위 번호 하나 뽑기
int num = (int) (Math.random() * 6) + 1;
switch (num) {
case 1:
System.out.println("1번이 나왔습니다.");
break;
case 2:
System.out.println("2번이 나왔습니다.");
break;
case 3:
System.out.println("3번이 나왔습니다.");
break;
case 4:
System.out.println("4번이 나왔습니다.");
break;
case 5:
System.out.println("5번이 나왔습니다.");
break;
default:
System.out.println("6번이 나왔습니다.");
break;
}
}
}
<실행 결과>
과제 코드는 기존의 if/else if 문을 Switch구문으로 수정한 코드입니다
조건문이라는 같은 역할을 수행한 다곤 하지만 어떤 차이가 있을까? 성능면에서 차이가 존재할까?
라는 의문점이 들었습니다!!
if구문의 경우는 먼저 처리할 조건들을 앞단에 배치하여 "&&" 또는 '&' 연산자를 이용하여
빠르게 조건문의 처리할 수 있다고 생각합니다
switch구문의 경우 해당하는 case가 존재하는지에 대한 체크과정이 모든 case에서 필요하다고 생각해서
if문이 더 빠르다고 생각했지만
검색을 해보니
switch구문의 시간 복잡도는 O(1),
if-else구문의 시간 복잡도는 O(n)으로
일반적으로는 swtich문의 속도가 더 빠르나 조건문의 분기수에 따라 if문이 더 빠를 수도 있다고 합니다
참고
■ 추가 숙제
p.202 05-2 확인 문제 6번 풀고 정리하기
#6. 키보드로부터 학생 수와 각 학생들의 점수를 입력받아서, 최고 점수 및 평균 점수를 구하는 프로그램을 작성하는 문제입니다.
각 switch문의 예상 결과에 맞춰 코드를 작성해야 합니다
· case 1은 학생 수를 입력
→ 스캐너 클래스 사용
· case 2는 입력받은 학생 수만큼 배열을 할당하고 배열의 각 요소마다 학생의 점수를 저장합니다
→ 배열 생성, 각 요소에 점수 저장
· case 3은 학생들의 점수를 출력합니다
→ for문을 이용한 배열 출력
· case 4는 학생들의 최고 점수와 평균 점수를 출력합니다
→ 최고 점수와 평균 점수 출력, sum변수를 int로 받는다면 소수점이 절사되어 값이 작아집니다
double형식으로 변수를 만들고 강제형변환을 사용!!
· case 5는 프로그램을 종료합니다
→ flag인 run변수를 false
import java.util.Scanner;
public class Chapter5_Exam06 {
public static void main(String[] args) {
boolean run = true;
int studentNum=0;
int [] scores =null;
Scanner scanner = new Scanner(System.in);
while (run) {
System.out.println("-------------------------------------------------");
System.out.println("1.학생수 | 2.점수입력 | 3.점수리스트 | 4.분석 | 5.종료");
System.out.println("-------------------------------------------------");
System.out.print("선택>");
int selectNo = Integer.parseInt(scanner.nextLine());
if (selectNo == 1) {
System.out.print("학생수>");
studentNum = Integer.parseInt(scanner.nextLine());
} else if (selectNo == 2) {
scores = new int[studentNum];
for (int i = 0; i < studentNum; i++) {
System.out.print("score["+i+']'+'>');
scores[i] = Integer.parseInt(scanner.nextLine());
}
} else if (selectNo == 3) {
for (int i = 0; i < studentNum; i++) {
System.out.println("score["+i+']'+"> "+scores[i] );
}
} else if (selectNo == 4) {
double sum=0;
int max_score=-1;
for (int score : scores) {
if (score > max_score) {
max_score = score;
}
sum+=score;
}
System.out.println("최고 점수: " + max_score);
System.out.println("평균 점수: "+sum/studentNum);
} else if (selectNo == 5) {
run = false;
}
}
System.out.println("프로그램 종료");
}
}
이번주도 공부하시느라 다들 수고가 많으십니다!!
같이 파이팅 해요!!!!