728x90

 

문제 : 9498번: 시험 성적 (acmicpc.net)

 

9498번: 시험 성적

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

풀이

스캐너 혹은 버퍼드리더로 숫자를 받는다
(버퍼드는 str만 받으므로 int로 형변환해야함. 또한 import문 넣을 때도 IOException도 같이 넣어줘야 컴파일 에러 안남)
각 점수대 별로 if문으로 점수 분배

 

정답


import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int score = Integer.parseInt(br.readLine());


        if(score >= 90){
            System.out.println("A");
        }else if(score >= 80){
            System.out.println("B");
        }else if(score >= 70){
            System.out.println("C");
        }else if(score >= 60){
            System.out.println("D");
        }else{
            System.out.println("F");
        }
    }
}

 

728x90
반응형
728x90

 

스캐너로 1-9 사이 양수를 받아

해당 수의 구구단을 출력하기

 

1-9외에 입력이 들어오면 1-9사이 정수만 입력하라는 문자를 출력하고

1-9가 들어오면 num1 변수를 가지고 for문 반복으로 구구단 출력

public void while_03() {
    // 1-9 사이 수를 입력 받아 구구단 출력
    Scanner sc = new Scanner(System.in);
    System.out.println("1-9 정수입력 : ");
    int num1 = sc.nextInt();

    if(num1 < 1 || num1 > 9 ) {
        System.out.println("1-9 정수입력만 입력가능");
    }else {
        for(int i=1; i < 10; i++) {
            System.out.println(num1+" x "+i+" = "+num1*i);
        }
    }
}
728x90
반응형
728x90

 

 

제어문(control flow statement)

프로그램의 수행 흐름을 바꾸는 역할

1.조건문

2.반복문

3.분기문

 

 

1.조건문

조건에 따라 다른 문장이 수행되도록 해줌

1)if

2)switch

 

if문을 주로 쓰고,

switch문은 처리해야 하는 경우의 수가 많을 때는 switch문이 유리

 

1)if문

if (조건식) {  // 조건식은 논리값(true/false)
		수행문장;
}

--> 조건식의 결과가 true면 안에 있는 문장 실행
if(조건식) {
		수행문장;
} else {
		수행문장;
}
--> 조건식의 결과가 true면, 안에 있는 문장 실행
--> 조건식의 결과가 false면, else 안에 있는 문장 실행

if else문은 조건이 2가지 일 때만 사용

3가지 이상이면 if, else if, else를 사용

 

else if

if(조건식) {
		수행문장;
} else if(조건식) {
		수행문장;
} else {
		수행문장;
}

if문은 처음에 반드시 와야함

else if는 여러 개일 수 있음

else문은 없을 수 있음

 

if문 하나에서 순차적으로 false되면 다음 조건으로 넘어가다가 true가 되면 이후 조건은 수행x

  -  if문끼리는 true라도 연속 동작함

ex)

if(month == 1 || month == 2 || month == 12) {
		season = "겨울";
		if(temperature <= -15) {
				season += "한파 경보";
		} else if(temperature <= -12) {
				season += "한파 주의보";
		}
} else if (month >= 3 && month <=5) {
				season = "봄";
} else if (month >= 6 && month <=8) {
			  season = "여름";
				if(temperature >= 35) {
						season += "폭염 경보";
				} else if(temperature >= 33) {
									season += "폭염 주의보";
				}
} else if(month >= 9 && month <= 11) {
				season = "가을";
} else { 
				season = "해당하는 계절이 없습니다.";
}

 

 

2)switch

형태

switch (조건식) {
case 값1 :
case 값2 :
case 값3 : 
default : 
}

조건식 : 정수, 문자, 문자열

조건식 정수,문자,문자열만 들어갈 수 있으므로, case의 값도 정수, 문자, 문자열 중에서 들어갈 수 있으며 해당 값이 일치하면 콜론(:)의 오른쪽 실제 실행되는 코드를 입력하면 된다

switch() ()안에 변수 값과 일치한 case 값을 true/false 논리로 해서 true되면 해당 case 안에 코드가 실행됨

어디에도 해당되지 않는 때 처리하는 것이 default ( = else)

 

if문과 switch문 차이

if문은 true가 되면 해당 조건의 코드 발동하고,

switch는 true된 코드부터 아래까지 전부 실행

if는 true가 되면 해당 코드만 실행하고 빠짐

switch는 각 case 안에 break 코드를 넣어줌

 

중첩 여부

switch끼리 중첩 가능

if switch 둘이 섞어서도 둘을 중첩해서도 모두 가능

 

예시 코드

(switch문은 주로 주문 메뉴에서 자주 쓰임)

public void method4() {
		
		// 메뉴 자판기
		// 번호지정하면 실행되는 로직
		Scanner sc = new Scanner(System.in);
		System.out.println("===메뉴===");
		System.out.println("1.간단 계산기");
		System.out.println("2.짝/홀수 판단");
		System.out.println("3.n월의 마지막 날");
		System.out.print("메뉴 번호 : ");
		int menuNum = sc. nextInt();
		
		switch(menuNum) {
		case 1:
			System.out.println("간단 계산기입니다");
			break;
		case 2:
			System.out.println("짝홀수 판단입니다.");
			break;
		case 3:
			System.out.println("n월의 마지막 날입니다.");
		// 1-3외의 다른 수가 입력된다면?
		// 아무런 반응x -> default로 해결
		default:
			System.out.println("잘못된 메뉴 번호입니다");
		}
	}

 

 

728x90
반응형
728x90

조건문과 반복문

 

1. 조건문

a. if문

<button onclick="ifTest();">if버튼</button>
<script>
  // 실습 예제
// 당신의 성별은 무엇입니까? 라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
// 필드에는 '남자/여자'라는 값이 자동으로 들어가 있는 상태
// 남자라고 입력하면 "XY입니다", 여자라고 입력하면 "XX입니다", 둘다 아니면 "잘못 입력했습니다"
// 라는 문구가 알람창으로 뜨게 하기
 function ifTest(){  
    var gender = prompt('당신의 성별은 무엇입니까?','남자/여자');
    
        if(gender == '남자'){
            console.log("XY입니다")
        }else if(gender == '여자'){     
            console.log("XX입니다")
        }else{
            console.log("잘못 입력했습니다")
        }
// 당신의 성별은 무엇입니까? 라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
// 필드에는 '남자/여자'라는 값이 자동으로 들어가 있는 상태  
//    -> var gender = prompt('당신의 성별은 무엇입니까?', '남자/여자');
   }
</script>

 

b. switch

<button onclick="switchTest();">switch문</button>
    <script>
        function switchTest(){ 
            var month = Number(prompt("현재는 몇 훨입니까?")); // prompt가 문자열 반환이라 문자를 숫자로 바꿔줘야함.
            console.log(typeof(month));  // 디버깅용 타입확인. 숫자인 것 같은데 비교가 안되는 상황이 자주 발생하니
            var day;
            switch(month){
                case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                    day = 31; break;
                case 4: case 6: case 9: case 11:
                    day = 30; break;
                case 2:
                    day = 28;
                }
                alert(month + "월은 " + day + "일까지입니다.");
            }
            
    // '현재는 몇 휠입니까? '라고 묻는 알람창이 뜨고 그 알람창에는 값을 입력할 수 있는 필드가 있음
    // 입력을 하고 나면 'M월은 N일까지입니다' 라는 결과가 알람창에 뜨게 하기

    </script>

 

2. 반복문

a. for문

<h4>for</h4>
  <button onclick="forTest();">for문</button>
  <script>
      function forTest(){
          var result = '';
          for(var i = 1; i<=10; i++){
              result += i + ' ';
          }
          alert(result);  // 1 2 3 4 5 6 7 8 9 10출력
      }
  </script>

 

b. while문

<h4>while문</h4>
    <button onclick="whileTest();">while문</button>
    <script>
		function whileTest(){
			var result = '';
			var i = 1; 
			while(i<=10){
				result += i + ' ';
				i++;
			}
			alert(result);   // 1 2 3 4 5 6 7 8 9 10
		}
    </script>

 

c. for in문

객체의 프로퍼티 키 열거 전용

자바 foreach랑 비슷

for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김 for in문에서 객체를 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 객체의 키가 담기게 됨

<button onclick="forInTest();">for in문</button>    <!-- 자바 foreach랑 비슷함 -->
    <script>
        function forInTest(){
            var result = '';
            var array = ['A', 'B', 'C', 'D', 'E'];

            for(var i in array){    // i의 디폴트값 0
                // for in문에서 배열을 가지고 사용할 때, 앞에 있는 변수(i)에 담기는 값은 배열의 인덱스가 담김
                console.log(i);     // 01234 <- 배열의 인덱스
                result += array[i] + ' ';
            }
            alert(result);          // A B C D E 

           /* 
            // 자바에서 이런식으로 사용
            for(Emp e : list){
                System.out.prinln(e);   
            }

            */
        }
    </script>

 

forEach()문

배열 순회 전용 메서드

forEach(function(item, index, arr){ ... })

item : 배열의 각 대상을 의미

index : 배열의 순서를 의미 (현재 몇번째 반복문이 돌고있는지)

arr : forEach 반복문에 사용되는 배열을 의미

 

자바스크립트 반복문 종류

1. for : 고전적인 for문

2. for in : 객체의 프로퍼티 키 열거 전용

3. for of : 이터러블 순회 전용

4. forEach(): 배열 순회 전용 메서드

5. while : 고전적인 while문

6. do while : 고전적인 do...while문

7. Object 객체 메서드: 객체 순회 전용

8. Array.prototye 메서드 : 배열 전용

https://curryyou.tistory.com/202

728x90
반응형
728x90

 

 

 

 

 

 

	public void practice9(){
		
		// 중간고사, 기말고사, 과제점수, 출석회수를 입력하고 Pass 또는 Fail을 출력하세요.
		// 평가 비율은 중간고사 20%, 기말고사 30%, 과제 30%, 출석 20%로 이루어져 있고
		// 이 때, 출석 비율은 출석 회수의 총 강의 회수 20회 중에서 출석한 날만 따진 값으로 계산하세요.
		// 70점 이상일 경우 Pass, 70점 미만이거나 전체 강의에 30% 이상 결석 시 Fail을 출력하세요.

		System.out.print("중간 고사 점수 : ");
		int midterm = sc.nextInt();
		System.out.print("기말 고사 점수 : ");
		int finals = sc.nextInt();
		System.out.print("과제 점수 : ");
		int score = sc.nextInt();
		System.out.print("출석 회수 : ");
		int attendance = sc.nextInt();
		
		double mid_proportion = midterm*0.2;	// 20%를 치환하면 *0.2
		double finals_proportion = finals*0.3;
		double score_proportion = score*0.3;
		double attendance_proportion = (100/20)*attendance*0.2;
		double sum = mid_proportion+finals_proportion+score_proportion+attendance_proportion;
		
//		100/20*attendance <= 0.7 ?
		
		System.out.println("================= 결과 =================");

		
		if(sum>=70) {
			System.out.printf("중간 고사 점수(20) : %.1f%n",mid_proportion);
			System.out.printf("기말 고사 점수(30) : %.1f%n",finals_proportion);
			System.out.printf("과제 점수            (30) : %.1f%n",score_proportion);
			System.out.printf("출석 점수            (20) : %.1f%n",attendance_proportion);
			System.out.printf("총점 : %.1f%n",sum);
			System.out.println("PASS");
		}else if (attendance*(100/20) <= 70 ) { // 비율 계산의 0.7이 아닌 출  
			System.out.printf("Fail [출석 회수 부족 (%d/20)]",attendance);
		}else if (sum<70) {
			System.out.printf("중간 고사 점수(20) : %.1f%n",mid_proportion);
			System.out.printf("기말 고사 점수(30) : %.1f%n",finals_proportion);
			System.out.printf("과제 점수            (30) : %.1f%n",score_proportion);
			System.out.printf("출석 점수            (20) : %.1f%n",attendance_proportion);
			System.out.printf("총점 : %.1f%n",sum);
			System.out.println("Fail [점수 미달]");
		}
	}
728x90
반응형
728x90

 

 

728x90
반응형
728x90

 

 

 

 

if문 회복시에 로그인 성공의 인자를 넣어줘도 실패가 뜬다

뭔가 문제일까

728x90
반응형
728x90

 

 

 

728x90
반응형
728x90

 

 

728x90
반응형
728x90

 

JAVA 제어문 - 4.1. 조건문 - 형식

조건문 Conditional Statement

 

모양

1)

if(조건) {
    실행될 코드
}

 

2)

if(조건) {
    실행될 코드
} else if(조건) {
    실행될 코드
} else {
    실행될 코드
}

 

 

 

시간에 순서에 따라서 a 1 b 출력하는 간단한 프로그램을 만들

System.out.println("a");
if(true) {
   System.out.println(1);
} else if(true){
     System.out.println(2);
} else {
    System.out.println(3);
}
System.out.println("b")

 


 

JAVA 제어문 - 4.2. 조건문 - 응용1

[run configuration] - [arguments] 값으로 egoing 입력

String id = "egoing";
String inputId = args[0];

System.out.println("Hi");

if(inputId.equals(id)) {
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

.equals() : 양쪽 내용을 비교한 값을 boolean type으로 반환

 

 

==에서는 같은 egoing인데 false 작동하고 .equals()로는 true 작동하는 이유

 == 주소값이 같아야 True .equals() 밸류값이 같으면 true이기 때문

다른말로, == true일려면 a=b 트루이지만 b 복사하여 새주소로 만들어진bfalse이다. 그러나 .equals() 이라면 값이 같으므로 true

 

 

== .equals() 차이

  종류 비교차이 call 방식
== 연산자(operator) 비교대상 주소값 call by reference
 .equals() 메소드(method) 비교대상의 내용 call by value

(주소값과 밸류값의 차이가 결국 call by reference value 개념과 같은 이야기인데

초보자들은 이해하기 어려우니 따로 분류)

 

 

Call by reference & value

1)call by reference : 주소값이 부여됨. 때문에 객체를 불러오면 주소값을 불러온다

      ex) class, 객체object

         String a = "100";

         String b = a;       # 같은 주소값

       (만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2)call by value : 기본적으로 대상의 주소값을 가지지 않고 '' 할당받는 형태

     ex) int, float, double 같은 primitive type

 


 

JAVA 제어문 - 4.3. 조건문  - 응용2

 

[run configuration] - [arguments] 에서 두번째 인자값 추가 1111 입력

( 추가는 스페이스로 공백 주면 된다)

 

String id = "egoing";
String inputId = args[0];
String pass = "1111"; // pw : 1111
String inputPass = args[1];

System.out.println("Hi");

if(inputId.equals(id)) {
	if(inputPass.equals(pass)) {
		System.out.println("Master!");
	} else {
		System.out.println("Wrong pw!");
	}
} else {
	System.out.println("Who are you?");
}

 

// 위의 if문을 더 심플하게 해보는 코드

if(inputId.equals(id) && inputPass.equals(pass)) { # && 논리연산자(=and)
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

 

논리연산자(&&)

A and B(A B 둘다)처럼 양쪽 요건을 충족할 경우 작동하는 것이 논리연산자

(파이썬의 and 같다)

 

 

 

728x90
반응형

+ Recent posts