728x90

SCPC 1차예선 D-14 ) 비트연산을처음 써보는데 신기하다

학교에서 어느과목인진 기억안나지만 shift연산을 자주햇었는데

알고리즘에서 shift 연산을해보니 좀 신기하네 1048은 제곱함수를 이용해서 쉽게구할수있겠지만 shift쓰는게 출제자의 의도이므로...

shift연산을 연습해야될거같다.

 

1045.

정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보자.
단 0 <= a, b <= 2147483647, b는 0이 아니다.

import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        
        int a = sc.nextInt();
        int b = sc.nextInt();
        
        System.out.printf("%d\n%d\n%d\n%d\n%d\n%.2f",a+b,a-b,a*b,a/b,a%b,(double)a/b);
        
        
    }
    
}

 

1046.

정수 3개를 입력받아 합과 평균을 출력해보자.
단, -2147483648 ~ +2147483647

 

import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        
        System.out.printf("%d\n%.1f",a+b+c, (double)(a+b+c)/3);
        
        
        
    }
    
}

 

1047.

정수 1개를 입력받아 2배 곱해 출력해보자.

참고
*2 의 값을 출력해도 되지만,
정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용한다.

2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 반으로 줄어드는데,

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,

오른쪽 비트시프트(>>)가 될 때에는
왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가된다.

범위(32비트)를 넘어서 이동되는 비트는 삭제된다.

예시
int a=10;
printf("%d", a<<1); //10을 2배 한 값인 20 이 출력된다.
printf("%d", a>>1); //10을 반으로 나눈 값인 5 가 출력된다.
printf("%d", a<<2); //10을 4배 한 값인 40 이 출력된다.
printf("%d", a>>2); //10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        System.out.println(n << 1);
        
        
        
    }
    
}

 

1048.

정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자.
0 <= a <= 10, 0 <= b <= 10


참고
예를 들어 1 3 이 입력되면 1을 23(8)배 하여 출력한다.

예시
int a=1, b=10;
printf("%d", a << b); //210 = 1024 가 출력된다.

 

a 를 2b배 만큼 곱한 값을 출력한다.

 

import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        
        
        if(b==0){
            System.out.println(a);
        }
        else{
        System.out.println(a * (2<<b-1) );
    }
    }
}

 

1049.

두 정수(a, b)를 입력받아

a가 b보다 크면 1을, a가 b보다 작거나 같으면 0을 출력하는 프로그램을 작성해보자.


참고
어떤 값을 비교하기 위해 비교/관계연산자(comparison/relational)를 사용할 수 있다.

비교/관계연산자 > 는
왼쪽의 값이 오른쪽 값 보다 큰 경우 참(true)을 나타내는 정수값 1로 계산하고,
그 외의 경우에는 거짓(false)를 나타내는 정수값 0으로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 1(참), 또는 0(거짓)으로 계산해 주는 연산자이다.

비교/관계연산자는 >, <, >=, <=, ==(같다), !=(다르다) 6개가 있다.

예시
printf("%d", 123<456); //비교 연산자 < 의 계산 결과인 1(참)이 출력된다.

 

import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b =sc.nextInt();
        
        if(a>b){
            System.out.println(1);
        }else{
            System.out.println(0);
        }
        
        
        
    }
    
}import java.io.IOException;
import java.util.Scanner;

public class Main{
    
    public static void main(String [] args) throws IOException{
        
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b =sc.nextInt();
        
        if(a>b){
            System.out.println(1);
        }else{
            System.out.println(0);
        }
        
        
        
    }
    
}
728x90

+ Recent posts