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);
}
}
}
'알고리즘 > SCPC준비' 카테고리의 다른 글
[JAVA] 코드업 1060~ 1064 자바코드 (0) | 2020.08.08 |
---|---|
[JAVA] 코드업 1055~1059 자바코드 (0) | 2020.08.08 |
[JAVA]코드업 1050 ~ 1054 자바코드 (0) | 2020.08.07 |
[JAVA]코드업 1040~1044 자바 코드 (0) | 2020.08.07 |
[JAVA] 코드업 1035~1039 자바 (0) | 2020.08.07 |