본문 바로가기

JAVA

< (JAVA) 코드업 1081 ~ 1090 >

 

 

 

 

 

 

 

 

 

 

안녕하십니까 !!

 

JAVA를 이용하여 코드업 문제 1081번 ~ 1090번 까지를 풀어보았어요

이제 100번 까지 얼마 안 남았어요 ㅎㅎ

 

 

 

 

 

 

 

 

 

 

1081 : [기초-종합] 주사위를 2개 던지면?

 

< 문제 설명 >

- 1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때 나올 수 있는 모든 경우를 출력해보자.


 < 참고 >
-  중첩의 원리 : 반복 실행 구조도 조건 실행 구조와 마찬가지로 중첩의 원리가 적용된다. 반복 실행 구조를 중첩하면 원하는 반복 구조를 다양하게 만들어 낼 수 있다.

 

< 예시 >

-  int i, j;
int n=3, m=6;
for(i=1; i<=n; i++)
{
  for(j=1; j<=m; j++)
  {
    printf("%d %d ", i, j);
  }
}

의 코드는 바깥쪽의 i가 1부터 n까지로 바뀌는 각각의 동안에 안쪽의 j가 1부터 m까지 변하며 출력된다.

- 중첩 반복되는 코드블록의 내용이 논리적으로 한 개의 단위이기 때문에 코드블록 기호를 생략하면 아래와 같이 작성할 수도 있다.

- int i, j;
int n=3, m=6;
for(i=1; i<=n; i++)
  for(j=1; j<=m; j++)
    printf("%d %d ", i, j);

- 반복 실행구조를 사용할 때에는 반복횟수를 기록해 두기 위해 i, j와 같은 변수를 선언해 사용해야 한다.

 

 

- 입력 : 주사위 2개의 면의 개수 n, m이 공백을 두고 입력된다. 단, n, m은 10이하의 자연수

ex ) 2 3

- 출력 : 나올 수 있는 주사위의 숫자를 한 세트씩 줄을 바꿔 모두 출력한다. 첫 번째 수는 n, 두 번째 수는 m으로 고정해 출력하도록 한다.

ex ) 1 1

       1 2

       1 3

       2 1

       2 2

       2 3

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                System.out.println(i +" " + j);
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

 

 

1082 : [기초-종합] 16진수 구구단?

 

< 문제 설명 >

- 16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운 영일(01)이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.

- A, B, C, D, E, F 중 하나가 입력될 때, 1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자. (단, A ~ F 까지만 입력된다.)

 

 

- 입력 : 16진수로 한 자리 수가 입력된다. 단, A ~ F 까지만 입력된다.

ex ) B

- 출력 : 입력된 16진수에 1~F까지 순서대로 곱한, 16진수 구구단을 줄을 바꿔 출력한다. 계산 결과도 16진수로 출력해야 한다.

ex )  B*1=B

        B*2=16

        B*3=21

        B*4=2C

        B*5=37

        B*6=42

        B*7=4D

        B*8=58

        B*9=63

        B*A=6E

        B*B=79

        B*C=84

        B*D=8F

        B*E=9A

        B*F=A5

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        String a = sc.next();

        int num = Integer.parseInt(a, 16);

        for (int i = 1; i < 16; i++) {
            System.out.format("%X*%X=%X\n", num, i, num*i);
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

 

1083 : [기초-종합] 3 6 9 게임의 왕이 되자!

 

< 문제 설명 >

- 3 6 9 게임을 하던 영일이는 3 6 9 게임에서 잦은 실수로 계속해서 벌칙을 받게 되었다. 3 6 9 게임의 왕이 되기 위한 마스터 프로그램을 작성해 보자.

 

< 참고 >
- 중첩의 원리

반복 실행 구조 안에 선택 실행 구조를 자유롭게 중첩할 수 있다.

 

- ** 3 6 9 게임은? : 여러 사람이 순서를 정해 순서대로 수를 부르는 게임이다. 만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이면, 대신 "박수" 를 쳐야 한다. 33까지 진행했다면? "짝짝"과 같이 박수를 두 번 치는 형태도 있다.

 

< 예시 >
- int i;
for(i=1; i<=100; i++) //1부터 100까지 반복
{
  if(i%3==0 || i%5==0) printf("%d ", i); //3또는 5의 배수인 경우 그 수 출력
}

 

 

- 입력 : 10 보다 작은 정수 1개가 입력된다. (1 ~ 9)

ex ) 9

- 출력 : 1 부터 그 수까지 순서대로 공백을 두고 수를 출력하는데, 3 또는 6 또는 9인 경우 그 수 대신 영문 대문자 X 를 출력한다.

ex )  1 2 X 4 5 X 7 8 X

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();

        for (int i = 1; i <= a; i++) {
            if (i % 3 == 0){
                System.out.print("X ");
            }
            else if (i % 3 != 0) {
                System.out.print(i + " ");
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1084 : [기초-종합] 빛 섞어 색 만들기

 

< 문제 설명 >

- 빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 빛의 색을 만들어 내려고 한다.

- 빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때, (빛의 강약에 따라 0 ~ n-1 까지 n가지의 빛 색깔을 만들 수 있다.) 주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과 총 가짓 수를 계산해보자.

 

< 예시 >
- i int i, j, k, c=0;
int r, g, b;
scanf("%d%d%d”, &r, &g, &b);

for(i=0; i<r; i++)
  for(j=0; j<g; j++)
    for(k=0; k<b; k++)
    {
      printf("%d %d %d\n", i, j, k);
      c++;
    }

printf("%d ", c);

 

 

- 입력 : 빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다. 예를 들어, 3 3 3 은 각 색깔 빛에 대해서 그 강약에 따라 0~2까지 3가지의 색이 있음을 의미한다.

ex ) 2 2 2

- 출력 : 만들 수 있는 rgb 색의 정보를 오름차순(계단을 올라가는 순, 12345... abcde..., 가나다라마...)으로 줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.

ex ) 0 0 0

       0 0 1

       0 1 0

       0 1 1

       1 0 0

       1 0 1

       1 1 0

       1 1 1

       8

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        int r = sc.nextInt();
        int g = sc.nextInt();
        int b = sc.nextInt();

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < g; j++) {
                for (int k = 0; k < b; k++) {
                    System.out.println(i + " " + j + " " + k);
                }
            }
        }
        System.out.println(r * g * b);
    }
}

 

완성된 코드

 

 

 

 

 

 

1085 : [기초-종합] 소리 파일 저장용량 계산하기

 

< 문제 설명 >

- 소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.

- 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크해 그 값을 정수값으로 바꾸고, 그 값을 저장해 소리를 파일로 저장할 수 있다.

- 값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고, 좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고, 녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.

- 1초 동안 마이크로 소리강약을 체크하는 수를 h(헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)

- 한 번 체크한 결과를 저장하는 비트 b (2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)

- 좌우 등 소리를 저장할 트랙 개수인 채널 c (모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)

-녹음할 시간 s가 주어질 때, 필요한 저장 용량을 계산하는 프로그램을 작성해보자.

- 실제로 일반적인 CD 음질(44.1KHz, 16bit, 스테레오)로 1초 동안 저장하려면 44100 * 16 * 2 * 1 bit의 저장공간이 필요하다.

- 이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 하는데, 압축하지 않은 순수한(raw) 소리 데이터 파일은 대표적으로 *.wav 가 있다.

 

< 참고 >
- **
      8 bit(비트)           = 1byte(바이트)     //       8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트) // 1024bit=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)
 

 

 

- 입력 : h, b, c, s 가 공백을 두고 입력된다. h는 48,000이하, b는 32이하(단, 8의배수), c는 5이하, s는 6,000이하의 자연수이다.

ex ) 44100 16 2 10

- 출력 : 필요한 저장 공간을 MB 단위로 바꾸어 출력한다. 단, 소수점 둘째 자리에서 반올림해 첫째 자리까지 출력하고 MB를 공백을 두고 출력한다.

ex ) 1.7MB

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        double h = sc.nextInt();
        double b = sc.nextInt();
        double c = sc.nextInt();
        double s = sc.nextInt();

        double result = (h*b*c*s)/8/1024/1024;
        System.out.printf("%.1f MB", result);
    }
}

 

완성돤 코드

 

 

솔직히 이 문제는 이해도 잘 안 되고 풀기가 어려워서 다른 분이 푸신 걸 참고하여 풀었습니다,,,,,ㅜㅜㅜ

 

단위들을 잘 알고 있어야 풀 때 수월할 거 같네용

 

 

 

 

 

 

1086 : [기초-종합] 그림 파일 저장용량 계산하기

< 문제 설명 >

- 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.

- 가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을 빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,

- 예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면, 한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서 총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.

- 그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데, 1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한 저장 용량을 계산할 수 있다.

- 이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이 *.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.

- 이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때, 압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.

 

< 예시 >
- 일반적인 1024 * 768 사이즈(해상도)의 각점에 대해 24비트(rgb 각각 8비트씩 3개)로 저장하려면 1024 * 768 * 24 bit의 저장 용량이 필요하다.

- 실제 그런지 확인하고 싶다면, 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.

- **
      8 bit(비트)           = 1byte(바이트)     //       8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트) // 1024bit=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)

 

 

- 입력 : w, h, b 가 공백을 두고 입력된다. 단, w, h는 모두 정수이고 1~1024 이다. b는 40이하의 4의 배수이다.

ex ) 1024 768 24

- 출력 : 필요한 저장 공간을 MB 단위로 바꾸어 출력한다. 소수점 이하 셋째 자리에서 반올림해 둘째 자리까지 출력한 뒤 MB를 출력한다.

ex ) 2.25 MB

 

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        double w = sc.nextInt();
        double h = sc.nextInt();
        double b = sc.nextInt();

        double result = (w*h*b) / 8 / 1024 / 1024;
        System.out.printf("%.2f MB", result);
    }
}

 

완성된 코드

 

아까 제가 헷갈려했던 문제랑 비슷한 유형이네요 !

 

 

 

 

 

 

 

1087 : [기초-종합] 여기까지! 이제 그만~

< 문제 설명 >

- 1, 2, 3 ... 을 순서대로 계속 더해나갈 때, 그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자.

- 즉, 1부터 n까지 정수를 계속 더한다고 할 때, 어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다.

- 하지만, 이번에는 그 때의 합을 출력해야 한다.

- 예를 들어 57을 입력하면 1+2+3+...+8+9+10=55에 다시 11을 더해 66이 될 때, 그 값 66이 출력되어야 한다.

 

< 참고 >

- 조건문이나 반복문의 코드블록 안에서 break;가 실행되면 가장 가까운 반복 코드블록 구역의 밖으로 빠져나간다.

 

< 예시 >
- int n, i, s=0;
scanf("%d", &n);
for(i=1; ; i++) //for 반목문에서 가운데의 조건이 빠진 경우 무한 반복된다.
{
  s+=i;
  if(s>=n)
    break; //참이면, 가장 가까운 반복 코드블록의 밖으로 빠져나간다.
} //break; 가 실행되면 반복을 중단하고 여기로 빠져 나온다.
printf("%d", s);

- 무한 반복이 되는 코드는 while(1) {...}, do {...}while(1); 등도 가능하다. 0이 아니면 모두 참(true)으로 인식되기 때문이다.

 

 

- 입력 : 언제까지 합을 계산할 지, 정수 1개를 입력받는다. 단, 입력되는 자연수는 100,000,000이하이다.

ex ) 57

- 출력 : 1, 2, 3, 4, 5 ... 순서대로 계속 더해가다가, 그 합이 입력된 정수보다 커지거나 같아지는 경우, 그때까지의 합을 출력한다.

ex ) 66

 

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 sum = 0;

        for (int i = 1; i <= a; i++) {
            sum +=i ;
            if (sum >= a) {
                break;
            }
        }
        System.out.println(sum);
    }
}

 

완성된 코드

 

 

 

 

 

 

 

1088 : [기초-종합] 3의 배수는 통과?

< 문제 설명 >

- 1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되, 3의 배수인 경우는 출력하지 않도록 만들어보자.

 

< 참고 >

- 예를 들면, 1 2 4 5 7 8 10 11 13 14 ... 와 같이 출력하는 것이다.

- 반복문 안에서 continue;가 실행되면 그 아래의 내용을 건너뛰고, 다음 반복을 수행한다. 즉, 다음 반복으로 넘어가는 것이다.

 

< 예시 >
- for(i=1; i<=n; i++) //1부터 시작해 n까지 1씩 증가시키면서 반복한다.
{
  if(i%2==0)
    continue; //짝수라면? 아래 부분은 건너뛰고! 계속~
  printf("%d ", i); //결국 짝수가 아닐 때에만 출력된다.
}

 

 

- 입력 : 정수 1개를 입력받는다. (1 ~ 100)

ex ) 10

- 출력 : 1부터 입력한 정수보다 작거나 같을 때까지 1씩 증가시켜 출력하되 3의 배수는 출력하지 않는다.

ex ) 1 2 3 4 7 8 10

 

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();

        for (int i = 1; i <= a; i++) {
            if (i % 3 == 0){
                continue;
            }
            else {
                System.out.print(i +" ");
            }
        }
    }
}

 

완성된 코드

 

 

 

 

 

 

1089 : [기초-종합] 수 나열하기1

< 문제 설명 >

-  어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(series)이라고 한다.

- 예를 들어 1 4 7 10 13 16 19 22 25 ... 은 1부터 시작해 이전에 만든 수에 3을 더해 다음 수를 만든 수열이다. 이러한 것을 수학에서는 앞뒤 수들의 차이가 같다고 하여 등차(차이가 같다의 한문 말) 수열이라고 한다.

 

-수열을 알게 된 영일이는 갑자기 궁금해졌다. "그럼.... 123번째 나오는 수는 뭘까?"

 

- 영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때
n번째 수를 출력하는 프로그램을 만들어보자.

 

 

- 입력 : 시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 100)

ex ) 1 3 5

- 출력 : n번째 수를 출력한다.

ex ) 13

 

package _CodeUp_;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        //시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때
        //n번째 수를 출력하는 프로그램을 만들어보자.

        int a = sc.nextInt(); //시작 값
        int d = sc.nextInt(); //등차
        int n = sc.nextInt(); //몇 번째인지를 나타내는 정수

        int result = a + (n-1)*d;
        System.out.println(result);
    }
}

 

완성된 코드

 

 

 

여기서 등차수열의 식은

a(첫째항) + (n - 1) * d 이다.

 

참고하세요!

 

 

 

 

 

 

 

1090 : [기초-종합] 수 나열하기2

< 문제 설명 >

-  어떤 규칙에 따라 수를 순서대로 나열한 것을 수열이라고 한다.

- 예를 들어 2 6 18 54 162 486 ... 은 2부터 시작해 이전에 만든 수에 3을 곱해 다음 수를 만든 수열이다.

- 이러한 것을 수학에서는 앞뒤 수들의 비율이 같다고 하여 등비(비율이 같다의 한문 말) 수열이라고 한다.

- 등비 수열을 알게된 영일이는 갑자기 궁금해졌다. "그럼.... 13번째 나오는 수는 뭘까?" 영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다.

- 시작 값(a), 등비(r), 몇 번째인지를 나타내는 정수(n)가 입력될 때 n번째 수를 출력하는 프로그램을 만들어보자.

 

 

- 입력 : 시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 10)

ex ) 2 3 7

- 출력 : n번째 수를 출력한다.

ex ) 1458

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 r = sc.nextInt(); //등비의 값
        int n = sc.nextInt(); //몇 번째인지를 나타내는 정수

        long result = (long) (a * Math.pow(r, n-1));
        System.out.println(result);
    }
}

 

완성된 코드

 

여기서 등비수열의 식은

ar ^ n - 1 입니다.

 

 

 

 

 

 

다들 조금만 더 화이팅하십숑 

'JAVA' 카테고리의 다른 글

< (JAVA) 코드업 1091 ~ 1099 >  (1) 2024.04.15
< (JAVA) 코드업 1071 ~ 1080 >  (0) 2024.04.01
< (JAVA) 코드업 1061 ~ 1070 >  (0) 2024.03.29
< (JAVA) 코드업 1051 ~ 1060 >  (0) 2024.03.28
< (JAVA) 코드업 1041 ~ 1050 >  (0) 2024.03.21