본문 바로가기

JAVA

< (JAVA) 코드업 1061 ~ 1070 >

 

 

 

 

 

 

 

 

 

 

 

 

안녕하세요! 

 

오늘도 돌아온 코드업 문제 풀기 ㅎㅎ

 

지난번에 이어서 JAVA를 이용하여 코드업 문제 1061번 ~ 1070번 까지를 풀어볼 거예요

 

 

 

 

 

 

 

 

 

 

1061 : [기초-비트단위논리연산] 비트단위로 OR 하여 출력하기

 

< 문제 설명 >

- 입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise) 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다.

 < 참고 >
-  ** | 은 파이프(pipe)연산자라고도 불리는 경우가 있다.

- ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다.

- 예를 들어 3과 5가 입력되었을 때를 살펴보면
3     : 00000000 00000000 00000000 00000011
5     : 00000000 00000000 00000000 00000101
3 | 5 : 00000000 00000000 00000000 00000111
이 된다.

- 비트단위 or 연산은 둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다.

- 이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

 

 

- 입력 : 2개의 정수가 공백을 두고 입력된다. -2147483648 ~ +2147483647

ex ) 3 5

- 출력 : 두 정수를 비트단위(bitwise)로 or 계산을 수행한 결과를 10진수로 출력한다.

ex ) 7

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(a | b);
    }
}

 

완성된 코드

 

 

 

 

 

 

 

1062 : [기초-비트단위논리연산] 비트단위로 XOR 하여 출력하기

 

< 문제 설명 >

- 입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다.

 < 참고 >
- ** 주의 ^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만, C언어에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다.

- ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다.

- 예를 들어 3과 5가 입력되었을 때를 살펴보면
3       : 00000000 00000000 00000000 00000011
5       : 00000000 00000000 00000000 00000101
3 ^ 5 : 00000000 00000000 00000000 00000110
이 된다.


- 이러한 비트단위 연산은 빠른 계산이 필요한 그래픽처리에서도 효과적으로 사용된다.

- 구체적으로 설명하자면, 두 장의 이미지가 겹쳐졌을 때 색이 서로 다른 부분만 처리할 수 있다. 배경이 되는 그림과 배경 위에서 움직이는  림이 있을 때, 두 그림에서 차이만 골라내 배경 위에서 움직이는 그림의 색으로 바꿔주면 전체 그림을 구성하는 모든 점들의 색을 다시 계산해 입히지 않고 보다 효과적으로 그림을 처리할 수 있게 되는 것이다. 비행기 슈팅게임 등을 상상해보면 된다.

 

 

- 입력 : 2개의 정수가 공백을 두고 입력된다. -2147483648 ~ +2147483647

ex ) 3 5

- 출력 : 두 정수를 비트단위(bitwise)로 xor 계산을 수행한 결과를 10진수로 출력한다.

ex ) 6

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(a ^ b);
    }
}

 

완성된 코드

 

 

 

 

 

 

1063 : [기초-삼항연산] 두 정수 입력받아 큰 수 출력하기

 

< 문제 설명 >

- 입력된 두 정수 a, b 중 큰 값을 출력하는 프로그램을 작성해보자. 단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.

 < 참고 >
-  3개의 요소로 이루어지는 3항(ternary) 연산자는 "조건식 ? (참일 때의 값) : (거짓일 때의 값)” 의 형태로 사용하는 연산자이다.


- 조건식의 계산 결과가 참인 경우에는 ':' 왼쪽의 값 또는 식으로 바뀌고,


- 거짓인 경우에는 ':' 오른쪽의 값 또는 식으로 바뀐다.

- 예를 들어 123 > 456 ? 0 : 1 과 같은 표현식은 123 > 456 의 비교연산 결과가 거짓이므로 1이 된다.

 

< 예시 >

- printf("%d", a>b ? a:b); //두 값 중 큰 값이 출력된다.

예시 코드는 a>b 의 결과가 참(1)이면 (a>b ? a:b)의 결과는 a가 되고,
거짓(0)이면 (a>b ? a:b)의 결과는 b가 된다.

 

 

- 입력 : 2개의 정수가 공백을 두고 입력된다. -2147483648 ~ +2147483647

ex ) 123 456

- 출력 : 두 정수 중 큰 값을 10진수로 출력한다.

ex ) 456

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();

        System.out.println(a > b ? a : b);
    }
}

 

완성된 코드

 

 

 

 

 

 

1064 : [기초-삼항연산] 정수 3개 입력받아 가장 작은 수 출력하기

 

< 문제 설명 >

- 입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자. 단, 조건문을 사용하지 않고 3항 연산자 ? 를 사용한다.

 < 참고 >
- C언어 소스코드 작성시 모든 요소들은  "순서에 따라 한 단계씩 실행", "미리 정해진 순서에 따라 하나씩 연산 수행", "그 때까지 연산된 결과를 이용해 다시 순서에 따라 하나씩 연산" ... 등의 원리가 적용된다.

따라서 3항 연산자 ? 를 중첩해(괄호로 묶는 등..) 이용하면 여러 값들을 순서대로 비교해 가장 큰/작은 값을 계산할 수 있다.

- 예를 들어 (a>b ? a:b)>c ? (a>b ? a:b):c 의 계산식은 a, b, c 의 값 중 가장 큰 값으로 계산된다.
- 잘 이해가 되지 않는다면 어떤 순서에 따라 계산될지 생각해보고 여러 가지 연산자가 동시에 사용된 식이 있을 때, 어떤 우선순위에 따라 순서대로 계산이 되는지 찾아보도록 한다.

- “연산자 우선순위”를 검색하면 우선순위와 결합방향이 나온다. 예를 들어 변수에 어떤 값을 대입하는 대입(assign) 연산자 = 의 우선순위는 가장 낮고, 오른쪽에서 왼쪽의 결합방향을 가진다.

- 따라서,
a = b = c = d = e = f = g = h = i = j = 0;
의 식을 실행하면 오른쪽에서부터 왼쪽으로 가면서 처음에 j 변수에 0이 대입되고, 다음에 i 변수에 j변수에 저장되어 있는 값이 저장되고, 그 다음에 h 변수에 i변수에 저장되어 있는 값이 저장되고 ... 결국 모든 변수의 값을 0으로 만드는 결과가 된다.

- ** 3항 연산자는 자주 사용되지는 않지만, 복잡한 계산식이나 조건 처리, 비교 구조를 매우 간단히 표현할 수 있게 해준다. 잘 사용해보면 나름대로의 재미와 묘미가 있는 연산자이다.

- 특히, 보다 짧은 코드로 문제를 해결하려고 하는 숏 코딩(coding)에서는 빠질 수 없는 요소이다. "똑같이 해결할 수 있는 프로그램이지만, 때로는 아주 적은 소스코드 양으로 풀어내는 것을 매우 즐기는 숏 코더들이 있다."

- 숏 코딩은 일종의 재미이기는 하지만, 프로그래밍언어의 밑바닥 기초, 세세한 처리 과정에 대한 이해, 컴파일러의 소스코드 해석과 변환 등에 대한 경험과 지식이 필요하다.

 

 

- 입력 : 3개의 정수가 공백으로 구분되어 입력된다. -2147483648 ~ +2147483648

ex ) 3 -1 5

- 출력 : 가장 작은 값을 출력한다.

ex ) -1

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        System.out.println((a < b ? a : b) < c ? (a < b ? a : b) : c);
    }
}

 

 완성된 코드

 

 

 

 

 

 

1065 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝수만 출력하기

 

< 문제 설명 >

- 세 정수 a, b, c가 입력되었을 때, 짝수만 출력해보자.

 < 참고 >
-  if(조건)
{ //조건이 참일 때에만 실행되는 구역(코드블록의 시작)
  실행1;
  실행2;
  ...
} //코드블록의 끝

의 조건/선택 실행 구조는
주어진 “조건”을 검사해 그 결과가 참인 경우에만 코드블록 안에 작성된 내용들을 순서대로 실행한다.


예시
if(a%2==0)
{
  printf(“%d”, a);
}

if(b%2==0)
{
  printf(“%d”, b);
}

if(c%2==0)
{
  printf(“%d”, c);
}

** a%2==0 은 a%2가 먼저 수행되고 그 결과를 0과 비교한 참/거짓 값을 계산한다.

a%2==0의 의미는 a를 2로 나눈 나머지를 0과 비교한 결과 값(참/거짓)이다.
따라서, if(a%2 == 0) 는 “a가 짝수라면?” 이라는 의미로 해석할 수 있다.

 

 

- 입력 : 세 정수 a, b, c 가 공백을 두고 입력된다. 0 ~ +2147483647 범위의 정수들이 입력되며 적어도 1개는 짝수이다.

ex ) 1 2 4

- 출력 : 짝수만 순서대로 줄을 바꿔 출력한다.

ex ) 2

       4

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if (a % 2 == 0) {
            System.out.println(a);
        }
        if (b % 2 == 0) {
            System.out.println(b);
        }
        if (c % 2 == 0) {
            System.out.println(c);
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1066 : [기초-조건/선택실행구조] 정수 3개 입력받아 짝/홀 출력하기

 

< 문제 설명 >

- 세 정수 a, b, c가 입력되었을 때, 짝(even)/홀(odd)을 출력해보자.

 < 참고 >
-  참고
if(조건)
{ //코드블록1 시작
  ... 실행...;
  ...
}
else
{ //코드블록2 시작
  ... 다른실행...;
  ...
}
의 조건/선택 실행구조는 주어진 “조건”을 검사해 참인 경우에는 코드블록1을 실행하고, 거짓인 경우에는 코드블록2를 실행한다.

예시
if(a%2==0)
{
  printf(“even”);
}
else
{
  printf(“odd”);
}

- ** else는 if 없이 혼자 사용되지 않는다. 또한, else 다음에 조건이 없는 이유는? 참이 아니면 거짓이고, 거짓이 아니면 참이기 때문에...
즉 if문의 조건식의 판별 결과는 2가지 경우(참 또는 거짓)로 계산되는데, else 부분은 if문의 조건식의 결과가 거짓인 경우에 해당하기 때문이다.

- ** 실행해야 할 명령들이 여러 개일 때 코드블록 기호 { }로 묶어 주는데, 코드블록의 내용이 논리적으로 1개 단위라면 코드블록 기호를 생략할 수 있다.
if(a%2==0) printf("even");
else printf("odd");

 

 

- 입력 : 세 정수 a, b, c 가 공백을 두고 입력된다. 0 <= a, b, c <= +2147483647

ex ) 1 2 8

- 출력 : 입력된 순서대로 짝(even)/홀(odd)을 줄을 바꿔 출력한다.
ex ) odd

      even

      even

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();

        if ( a % 2 == 0 ) {
            System.out.println("even");
        }
        else {
            System.out.println("odd");
        }
        if ( b % 2 == 0 ) {
            System.out.println("even");
        }
        else {
            System.out.println("odd");
        }
        if ( c % 2 == 0 ) { 
            System.out.println("even");
        }
        else {
            System.out.println("odd");
        }
    }
}

 

완성된 코드

 

 

 

 

 

1067 : [기초-조건/선택실행구조] 정수 1개 입력받아 분석하기

 

< 문제 설명 >

- 정수 1개가 입력되었을 때, 음(minus)/양(plus)과 짝(even)/홀(odd)을 출력해보자.

 < 참고 >
- 조건/선택 실행 구조의 안에 조건/선택 실행 구조를 다시 "중첩"할 수 있다. 이는 "중첩(nested)"의 원리가 적용되는 내용으로 아래와 같은 구조가 가능하다.

if(조건1)
{
  if(조건2) //조건문의 중첩
  {
    ...
  }
  else
  {
    ...
  }
}
else
{
  if(조건2)
  {
    ...
  }
  else
  {
    ...
  }
}

- 위와 같은 조건/선택 실행구조는 조건/선택 실행구조를 중첩해 서로 다른 4가지(2가지*2가지)의 경우에 대해 다른 실행을 할 수 있도록 해준다.

- ** 어떤 조건들이 맞았을 때에는 해당부분의 코드블록 내용만 실행되고, 전체 조건/선택 실행구조를 빠져나간다. 즉, 다른 부분들은 실행되지 않는다.

- ** 소스코드의 들여쓰기는 사람이 보고 이해하기 쉽도록 하는 것으로써 들여쓰기나 줄바꿈을 하지 않더라도 동일하게 컴파일된다.

 

 

- 입력 : 정수 1개가 입력된다. -2147483648 ~ +2147483647, 단 0은 입력되지 않는다.

ex ) -2147483648

- 출력 : 입력된 정수에 대해 첫 줄에 minus 나 plus 를 출력하고, 두 번째 줄에 odd 나 even 을 출력한다.
ex ) minus

        even

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        if ( a > 0 ) {
            System.out.println("plus");

            if (a % 2 == 0) {
                System.out.println("even");
            }
            else {
                System.out.println("odd");
            }
        }
        else {
            System.out.println("minus");

            if (a % 2 == 0) {
                System.out.println("even");
            }
            else {
                System.out.println("odd");
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1068 : [기초-조건/선택실행구조] 정수 1개 입력받아 평가 출력하기

 

< 문제 설명 >

- 점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자.

 

평가 기준
점수 범위 : 평가
 90 ~ 100 : A
 70 ~   89 : B
 40 ~   69 : C
   0 ~   39 : D
로 평가되어야 한다.


 < 참고 >
- 여러 조건들을 순서대로 비교하면서 처리하기 위해서 조건문을 중첩할 수 있다. 만약, 순서대로 검사하고 실행하기 위해 아래와 같이 중첩 시킨다면,
if(조건1)
{
  ...
}
else
{
  if(조건2)
  {
    ...
  }
  else
  {
    ...
  }
}

- 중첩된 구조는 논리적으로 1단위이기 때문에 코드블록 기호를 생략하면 아래와 같은 구조로 다시 표현될 수 있다.

if(조건1) { ... ; }
else if(조건2) { ... ; }
else { ...; }

이와 같이 조건을 계속 붙여나가면..

if(조건1) { ... ; }
else if(조건2) { ... ; }
else if(조건3) { ... ; }
else if(조건4) { ... ; }
else if(조건5) { ... ; }
else if(조건6) { ... ; }
else if(조건...) { ... ; }
else { ... ; }

- 위와 같은 구조를 만들어 순서대로 조건을 검사할 수 있다. 어떤 조건이 참이면, 그 부분의 내용을 실행하고 조건/선택 구조를 빠져나간다.

- 이렇게 조건들을 순서대로 검사할 때에는 중간에 범위가 빠지지 않았는지 꼼꼼하게 생각하고 조건들을 만드는 것이 중요하다. 이는 마치 수학에서 빠진 범위 없이 부등식을 만드는 것과 유사하다.

 

 

- 입력 : 정수(0 ~ 100) 1개가 입력된다.

ex ) 73

- 출력 : 평가 결과를 출력한다.
ex ) B

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        //점수 범위 : 평가
        // 90 ~ 100 : A
        // 70 ~   89 : B
        // 40 ~   69 : C
        //   0 ~   39 : D
        //로 평가되어야 한다.

        if (a >= 90 && a <= 100) {
            System.out.println("A");
        }
        else if (a >= 70 && a <= 89) {
            System.out.println("B");
        }
        else if (a >= 40 && a <= 69) {
            System.out.println("C");
        }
        else if (a >= 0 && a <= 39){
            System.out.println("D");
        }
    }
}

 

완성된 코드

 

 

 

 

 

1069 : [기초-조건/선택실행구조] 평가 입력받아 다르게 출력하기

 

< 문제 설명 >

- 평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자.

평가 내용
평가 : 내용
A : best!!!
B : good!!
C : run!
D : slowly~
나머지 문자들 : what?


 < 참고 >
- 조건/선택문을 복합적으로 구성해 출력할 수도 있지만,

switch(정수값)
{
  case 'A': //문자 'A'가 정수값 65('A'의 아스키 값)로 저장되기 때문에 가능하다.
    ...;
    break;
  case 'B':
    ...;
    break;
  case 'C':
    ...;
    break;
  default:
    ...;
}

- 위와 같은 switch( ) ... case... break; 제어문을 사용할 수 있다.

- ** break; 를 사용하지 않으면 이후의 명령들도 계속 실행된다. default: 는 제시된 case 를 제외한 나머지 모든 경우에 실행된다. switch( ) 에 주어지는 값은 “정수"값만 가능하며, 문자도 아스키코드 정수값이기 때문에 가능하다.

 

 

- 입력 : 영문자 1개가 입력된다. (A, B, C, D 등의 한 문자가 입력된다.)

ex ) A

- 출력 : 평가내용에 따라 다른 내용이 출력된다.
ex ) best !!!

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        char a = sc.nextLine().charAt(0);

        //평가 : 내용
        //A : best!!!
        //B : good!!
        //C : run!
        //D : slowly~
        //나머지 문자들 : what?
        switch (a) {
            case 'A':
                System.out.println("best!!!");
                break;
            case 'B':
                System.out.println("good!!");
                break;
            case 'C':
                System.out.println("run!");
                break;
            case 'D':
                System.out.println("slowly~");
                break;
            default:
                System.out.println("what?");
                break;
        }
    }
}

 

완성된 코드

 

 

 

 

 

1070 : [기초-조건/선택실행구조] 월 입력받아 계절 출력하기

 

< 문제 설명 >

- 월이 입력될 때 계절 이름이 출력되도록 해보자.


월 : 계절 이름
12, 1, 2 : winter
  3, 4, 5 : spring
  6, 7, 8 : summer
  9, 10, 11 : fall


 < 참고 >
- swtich( ).. case ... break; 제어문에서 break;를 제거하면 멈추지 않고 다음 명령이 실행되는 특성을 이용할 수 있다.

switch(a)
{
  ...
  case 3:
  case 4:
  case 5:
    printf("spring");
  break;
  ...
}
로 작성하면, 3, 4, 5가 입력되었을 때 모두 "spring"이 출력된다.

- ** 12, 1, 2 는 어떻게 처리해야 할지 여러 가지로 생각해 보아야 한다. 

 

 

- 입력 : 월을 의미하는 1개의 정수가 입력된다.(1 ~ 12)

ex ) 12

- 출력 : 계절 이름을 출력한다.
ex ) winter

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int a = sc.nextInt();

        //월 : 계절 이름
        //12, 1, 2 : winter
        //  3, 4, 5 : spring
        //  6, 7, 8 : summer
        //  9, 10, 11 : fall
        
        switch (a) {
            case 1:
            case 2:
                System.out.println("winter");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("spring");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("summer");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("fall");
                break;
            default:
                System.out.println("winter");
                break;
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

이렇게 해서 오늘도 완벽하게 잘 풀어보았습니다아 !

모두 수고하셨구 오늘 하루도 화이팅 ~.~

 

 

'JAVA' 카테고리의 다른 글

< (JAVA) 코드업 1081 ~ 1090 >  (1) 2024.04.05
< (JAVA) 코드업 1071 ~ 1080 >  (0) 2024.04.01
< (JAVA) 코드업 1051 ~ 1060 >  (0) 2024.03.28
< (JAVA) 코드업 1041 ~ 1050 >  (0) 2024.03.21
< 구구단 출력하기 (JAVA) >  (0) 2024.03.17