Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
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
Tags
more
Archives
Today
Total
관리 메뉴

정리정돈 개발블로그~

[3일차] 국비교육 본문

국비학원 교육 일지

[3일차] 국비교육

snooop 2022. 7. 21. 17:45

6.비트연산자

 

bit: 컴퓨터 중간값을 인식 못함, 0과1로만 구성
      하드웨어를 제어하거나 영상처리, 음성처리 

package 비트연산;
//비트 연산이란 : 0과 1로 구성된 1개의 비트끼리 연산을 수행
//& (&&일반 논리연산) :  bit And, 값이 둘다 1이면 1
//| : bit OR, 둘 중 하나만 1이면 1
//^ : XOR, (하드웨어 설계 시 사용 많음), 두개의; 비트값이 다르면 1
//~ : 비트를 반전(0이면 1, 1이면 0으로 ..)
//<< : 왼쪽으로 지정된 수만큼 비트를 이동 시킴
//>> : 오른쪽으로 지정된 수만큼 비트를 이동 시킴
public class BitOpEx1 {
      public static void main(String args[]){


      int num1 = 10;
      int num2 = 12;
      System.out.println(num1 & num2);
      System.out.println(num1 | num2);
      System.out.println(num1 ^ num2);//달라야 1이 됨(1,0일 경우)
      System.out.println(~num1);//최상위 비트가 1이면 양수. 0이면 음수
      System.out.println(num1 << 1);// X2한 것과 같음 , 옛날엔 컴파일러에 *,/연산자 없었음
      System.out.println(num1 >> 1);
}
}

 

7. 조건문

 

1) if 문

package 조건문;

import java.util.Scanner;

//if(조건식){수행할 문장}
//만약에 조건식에 수행할 문장이 한줄이면 {}생략 할 수 있음
public class IfExMain {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("정수를 입력 : ");
        int n = sc.nextInt();
        if(n >= 0){
            System.out.println("양수 입니다.");
        }


    }
}

 

2) if / else 문

public class IfExMain {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        System.out.print("정수를 입력 : ");
        int n = sc.nextInt();
        if(n > 100){
            System.out.println("100보다 커요.");
        }else if(n<100){
            System.out.println("100보다 작아요.");
        }else{
            System.out.println("100과 같아요.");
        }


    }
}

3) if / else if / else 문

public class IfExMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("문자를 입력 하세요 : ");
        char ch = sc.next().charAt(0); //문자열에서 0번째 문자를 추출
        if (ch >= 'a' && ch <= 'z') {// 문자는 내부적으로 ascii(unicode)값으로 판단 함
            System.out.println("입력하신 알파벳은 소문자입니다.");
         }else if (ch >= 'A' && ch <= 'Z') {
            System.out.println("입력하신 알파벳은 대문자입니다.");
         }else{
                System.out.println("알파벳이 아닙니다.");
            }


        }


}

 

활용 문제 1 백준 2884번))

 

package 상근이알람;

import java.util.Scanner;

// 상근이 알람 설정하기 (시간과 분은 각각의 변수로 따로 받음), nextInt() 2번 사용
// 24시간제이고 입력 받은 시간에서 45분 빼서 시간을 설정
// 힌트 : 시간을 분으로 환산하고 계산 다시 시간과 분으로 변경
// 0 :30과 같은 경우를 고민 if 문으로 처리가 가능
// 필요 문법 : 나머지 연산자, 나눗셈 연산자, 조건문
// 출력은 시간과 분으로 출력
public class AlarmEx1 {
    public static void main(String[] args){
    /*    Scanner sc= new Scanner(System.in);
        System.out.print("상근이 알람 시간입력 : ");
        int h = sc.nextInt();
        int m = sc.nextInt();



        if(h>0){
            h--;
            if(m>=45){
                m = m -45;
            }else{
                m = 60-(45-m);

            }
            System.out.println("알람 맞출 시간 : "+ h);
            System.out.println("알람 맞출 시간 : "+ m);
        }

        if(h<=0){
            h=23;
            if(m>=45){
                m = m -45;
            }else{
                m = 60-(45-m);
            }
            System.out.println("알람 맞출 시간 : "+ h);
            System.out.println("알람 맞출 시간 : "+ m);
        }
*/

        Scanner sc= new Scanner(System.in);
        System.out.print("상근이 알람 시간입력 : ");
        int hour, min, calc; //시간, 분 , 시간과 분을 분으로 환산
        hour = sc.nextInt();
        min = sc.nextInt();
        calc = (hour * 60) + min;
        if(calc < 45) calc =(24 * 60) + min;
        calc -=45;//calc = calc -45;
        System.out.println("알람 : " + (calc / 60) + "시" + (calc % 60 )+ "분");


    }
}

주석부분이 내가 푼 부분

 

활용 문제 2))

 

package 조건문예제2;

import java.util.Scanner;

//시험 성적을 입력 받아서 90점 이상 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D
//나머지는 F
//입력 받은 시험성적이 0 ~ 100 사이가 아니면 "성적이 잘못입력 되었습니다."
public class GradeEx1 {
    public static void main(String args[]){
        int score;//성적을 입력 받는 변수
        Scanner sc = new Scanner(System.in);
        System.out.print("성적을 입력하세요. : ");
        score = sc.nextInt();// 성적을 입력 받아 score변수에 대입
        if(score < 0 || score > 100) {
         System.out.println("성적을 잘 못 입력 하였습니다.");
         return;//반환값이 없어도 써도 됨. 프로그램 종료를 의미, 자바에서는 없어도 가능
        }
       // System.out.printf("등급을 결정하는 코드 구현 부");
        if(score >=90 && score<=100 ){
            System.out.print("A");
        }if(score >= 80 && score <90){
            System.out.print("B");
        }if(score >= 70 && score <80) {
            System.out.print("C");
        }if(score >= 60 && score <70){
            System.out.print("D");
        }else if(score < 60){
            System.out.print("F");
        }
    }

}

 

4)switch 문

  • 정수 문자 문자열이 변수로 올 수 있음
  • default 나머지 조건 해당 
  • break를 만나야 해당 케이스만 실행
public class SwitchEx1 {
 public static void main (String[] args){
     Scanner sc = new Scanner(System.in);
     System.out.print("계산식을 입력 하세요 : ");
     int a = sc.nextInt();
     char op = sc.next().charAt(0);
     int b = sc.nextInt();
     switch (op) {
         case '+': //각 case는 :을 사용
             System.out.printf("덧셈 : %d\n", a + b);
             break;
         case '-':
             System.out.printf("뺄셈 : %d\n", a - b);
             break;
         case '*':
             System.out.printf("곱셈 : %d\n", a * b);
             break;
         case '/':
             System.out.printf("나눗셈 : %d\n", a / b);
             break;

         default:
             System.out.printf("해당 연산자는 없습니다.\n");

     }
 }
}
 Scanner sc = new Scanner(System.in);
           System.out.print("성별을 입력하세요 : ");
              char gender = sc.next().charAt(0);
              switch (gender){
                  case 'M':
                  case 'm':
                      System.out.println("남성 입니다.");
                      break;
                  case 'F':
                  case'f':
                      System.out.println("여성 입니다.");
                      break;
                  default :
                      System.out.println("성별을 잘 못 입력하셨습니다. 다시 입력하세요.");
              }

 

Scanner sc = new Scanner(System.in);
           while(true) {
             System.out.print("성별을 입력하세요 : ");

               char gender = sc.next().charAt(0);
               switch (gender) {
                   case 'M':
                   case 'm':
                       System.out.println("남성 입니다.");
                       break;
                   case 'F':
                   case 'f':
                       System.out.println("여성 입니다.");
                       break;
                   default:
                       System.out.println("성별을 잘 못 입력하셨습니다. 다시 입력하세요.");
                       continue;//반복문으로 다시 돌아감
               }
               break;
           }//while 문 무한루프, break 문으로 탈출가능

----> 잘 못 입력 하였을 경우 다시 입력 받는 것을 while문으로 구현

 

 

어제 했던 예제))최댓값 찾기

if (a>b) {
            if (a > c) System.out.println(a);
            else System.out.println(c);
            
        } else {
            if (b>c) System.out.println(b);
            else System.out.println(c);
            //다른 풀이
            // if (a>b) System.out.println(Math.max(a,c));
           //else System.out.println(Math.max(b,c));
        }

 


 

8.반복문

  • for문 반복할 횟수가 정해졌을 때
  • while문 반복할 횟수가 정해지지 않을때

 

public class WhileEx1 {
    public static void main(String[] args) {
       int age;//나이를 입력 받기 위한 변수
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.print("나이를 입력 하세요: ");
            age = sc.nextInt();
            if(age > 0 && age <200) break;
            System.out.println("나이를 잘못 입력 하셨습니다.");
        }
    }
}
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수 입력 :");
        int n = sc.nextInt();
        int sum = 0; //값을 안 넣으면 쓰레기 값으로 시작하게 됨
        //while 문 조건식에 정수값만 받아서 참 판별 허용 하지 않음
        //0이 아니면 무조건 참임 다른 언어의 경우

        for (int i = 1; i <= n; i++){
            sum += 1;
        }
        /*  for(;;){
            sum += i;
            if(i == n)break;
            i++;
        }*/
        System.out.println("합계 : " + sum);
    }
}
public class WhileEx1 {
    public static void main(String[] args) {
        int age;//나이를 입력 받기 위한 변수
        Scanner sc = new Scanner(System.in);
       /* while(true){
            System.out.print("나이를 입력 하세요: ");
            age = sc.nextInt();
            if(age > 0 && age <200) break;
            System.out.println("나이를 잘못 입력 하셨습니다.");
        }*/
        boolean isFirst = true; //is First : 첫번째 진입인가?
        do {
            if(!isFirst /*isFirst == false*/) System.out.println("나이를 잘못 입력 하셨습니다.");
            System.out.print("나이를 입력 하세요 :");
            age = sc.nextInt();
            isFirst = false;
        }while(age <= 0 || age >= 200);
    }

첫번째는 무조건 do문 실행 후 

while문에 해당하지만 처음이 아닐때는 "나이를 잘못 입력하셨습니다"를 실행하고 

(while문에 해당 되어야 do문을 실행하기때문에 --> 맞게 입력하면 빠져 나감(실행 종료)

다시 "나이를 입력하세요"를 입력 받는다.

(주석값과 코드값은 같은 결과값이지만 다른 문법 사용)

 

예제))while문과 for문 

package While반복문;

import java.util.Scanner;

public class WhileEx1 {
    public static void main(String[] args) {
      /*  int treeHit = 0;
        while(treeHit < 10) {
            treeHit++;
            System.out.println("나무를 " + treeHit + "번 찍었습니다.");
            if(treeHit == 10){
                System.out.println("나무가 넘어 갑니다.");
            }*/

//        }

        for(int i = 1 ;i <= 10; i++){
            System.out.println("나무를 " + i + "번 찍었습니다.");
        }
        System.out.println("나무가 넘어 갑니다.");
    }

}

 

예제))한줄에 10개씩 찍기

package for반복문;
//for(초기식;최종식;증가식) { 참인 동안 수행되는 문장 }

public class ForEx1 {
    public static void main (String[] args){
        for(int i = 1; i <= 100; i++){
            System.out.printf("%4d", i);
            //한줄에 10개씩 찍기
            if(i % 10 == 0){
                System.out.println();
            }
        }
        System.out.println();
    }
}

예제)) 1~1000사이의 7의 배수를 구하고 한줄에 10개씩 출력

ublic class ForEx1 {
    public static void main (String[] args){
        for(int i = 1; i <= 1000; i++){
            if(i % 7 == 0 ) System.out.printf("%4d",i);
            //한줄에 10개씩 찍기
            if(i % 70 == 0) System.out.println();

        }
        System.out.println();
    }
}

예제))

//정수 n을 입력 받아 n * n 출력 (1부터 시작 ~~)
//Input n : 3
//output
//123
//456
//789
Scanner sc = new Scanner(System.in);
 System.out.print("정수를 입력하세요. : ");
 int n = sc.nextInt();

 for(int i = 1; i <= n * n; i++){
     System.out.printf("%4d", i);
     if(i%n == 0) {
         System.out.println();

n*n 중요----> 대신 square로 입력해서 사용가능

 

예제))

//정수 n 입력을 받음. 입력 과목 수 만큼의 성적 입력 받기, 총점과 평균 구하기
public class ForEx1 {
    public static void main (String[] args) {

        //정수 n 입력을 받음. 입력 과목 수 만큼의 성적 입력 받기, 총점과 평균 구하기
        Scanner sc = new Scanner(System.in);
        int total = 0; //총점을 구하는 변수
        int score;
        System.out.print("과목 수 입력하세요. : ");
        int n = sc.nextInt();
        for(int i = 0; i < n; i++) {
            score = sc.nextInt();
            total += score;

        }
        System.out.println("총점: " + total);
        System.out.printf("평균 : %.2f\n" , (double)total/n);

    }
}

*면접 시 필요할 수 있음

빅오표기법

O(1) ---> 가장 이상적이지만 달성할 수 없음

처리해야 할 데이터양과 상관없이 항상 일정한 실행 시간을 갖는 알고리즘

O(logN) 

처리해야 할 데이터양이 증가할수록 실행 시간도 약간 증가하는 알고리즘이다. 일반적으로 효율이 높은 검색 알고리즘이 해당 된다.

(반으로 잘라서 값을 찾기, 한번 찾을 때마다 크기가 반으로 줄어 듦)

O(N)

처리해야 할 데이터양과 비례해 실행 시간이 증가하는 경우 (1부터 100까지 더하는 반복문)

재귀호출도 여기에 해당 된다.

O(NlogN)

처리해야 할 데이터양보다 실행 시간이 좀 더 빠르게 증가한다. 효율이 높은 정렬 알고리즘이 해당 된다.

퀵 정렬

O(N2)

반복문이 2번 중첩된 경우의 알고리즘

버블정렬

for(i = 0; i < N; i++) {
 for(j = 0; j < N; j++) {
 }
}

O(N3)

반복문이 3번 중첩된 경우의 알고리즘

데이터양이 증가하면 실행 시간은 그의 세제곱만큼 증가하므로 좋은 알고리즘이라고 볼 수 없다.

 

이중  for문

 

예제)) 별찍기

package 이중for문;

public class DoubleFor {
    public static void main(String[] args){
      for(int i = 0; i < 10; i++){
          System.out.printf("|i = %d|",i);//행을 나타냄
          for(int j = 0; j < 10; j++){
                  System.out.print("* ");//열을 나타냄
          }
          System.out.println();
      }
    }
}

 

예제))구구단

 

package 이중for문;
//구구단
public class DoubleFor {
    public static void main(String[] args) {
        for (int i = 2; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                System.out.printf("%d x %d = %d\n", i, j, (i * j));
            }
            System.out.println("-------------------------");
        }
    }
}

 

예제))별찍기

 

package 이중for문;
//정수 n을 입력 받아서 별찍기
//*
//* *
//* * *
//* * * *

import java.util.Scanner;

public class DoubleFor {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("정수 입력 :");
        int n =sc.nextInt();
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.printf("* ");
            }
            System.out.println( );
        }
    }
}

예제))주사위

 

int num1, num2;
while (true) {
    //1 부터 6까지의 난수가 만들어 짐
    num1 = (int)((Math.random() * 6)) + 1;
    num2 = (int)((Math.random() * 6)) + 1;
    System.out.println("주사위의 합 : " +( num1 + num2));
    if((num1+num2) == 12 ) break;

 

예제))소수판별

package 이중for문;
//입력 받은 수가 소수인지 아닌지 판별하기
//소수란? 1과 자기자신이외의 수로는 나누어 지지 않는 수를 의미함
//Ex)2,7,5,3
//n의 수를 입력 받아서 범위내의 소수의 합을 구하기 : 12미만 (2 + 3+ 5 + 7 + 11)
import java.util.Scanner;

public class DoubleFor {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        boolean isPrime = true; //소수를 판별할 논리형 변수
        System.out.print("정수 입력 :");
        int n = sc.nextInt();
        //1은 소수도 합성수도 아니므로 i는 2부터 시작한다.
        //2의 경우 반복문이 실행되지 않으므로 default값(boolean isPrime = true)으로 실행된다.
        for (int i = 2; i < n; i++){
        //나누어지는 수가 있을 경우 isPrime의 값을 false로 바꾼다.
            if(n % i == 0) isPrime = false;
            //n/i(ex)n=5 5/1, 5/2, 5/3, 5/4 나머지가 다 있음(나누어 떨어지지 않음)를 했을때 
            //나머지가 없는 경우 소수임 isPrime = true로 유지
            
            //한 번이라도 이 조건문이 실행될 경우 n은 소수가 아니므로 반복문을 빠져나온다
        }
       if(isPrime)System.out.println(n+"은 소수 입니다.");
       else System.out.println(n+"은 소수가 아닙니다.");
    }
}

**소수 판별 :에네토스테네스의 체를 이용(n% i ==0)

예제))n의 수를 입력 받아서 범위내의 소수의 합을 구하기 : ex)12미만(2 + 3 + 5 + 7+ 11)

package 이중for문;
//입력 받은 수가 소수인지 아닌지 판별하기
//소수란? 1과 자기자신이외의 수로는 나누어 지지 않는 수를 의미함
//Ex)2,7,5,3
//n의 수를 입력 받아서 범위내의 소수의 합을 구하기 : 12미만 (2 + 3+ 5 + 7 + 11)
import java.util.Scanner;

public class DoubleFor {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int sum = 0;
        System.out.print("정수 입력 :");
        int n = sc.nextInt();
        for (int i = 2; i < n; i++){
          sum += funcPrime(i);
        }
        System.out.println("소수의 합 :" +sum);
    
     
    }
    static int funcPrime(int n) {
        boolean isPrime = true;
        for(int i = 2; i < n; i++){
            if(n % i == 0) isPrime = false;

        }
        if(isPrime) return n;
        else return 0;
    }
}

'국비학원 교육 일지' 카테고리의 다른 글

[8일차] 국비교육  (0) 2022.07.28
[7일차] 국비교육  (0) 2022.07.27
[6일차] 국비교육  (0) 2022.07.26
[5일차] 국비교육  (0) 2022.07.25
[4일차]국비교육  (0) 2022.07.22