본문 바로가기

알고리즘/코드업

[코드업] 코드업 기초 100문제 풀이 1081 ~ 1084 (Java)

 

# 1081 - 주사위를 2개 던지면?

 

문제

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

 

입력

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

<입력 예시>

2  3

 

출력

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

<출력 예시>

1 1

1 2

1 3

2 1

2 2

2 3

 

import java.util.Scanner;

public class Main {
    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.printf("%d %d\n",i,j);
            }
            // 두번째 방법
            if(i%3==0) {
                System.out.print("X"+" ");
            } else {
                System.out.print(i+" ");
            }
        }
    }
}

 

 

 

# 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 까지만 입력된다.

<입력 예시>

B

 

출력

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

<출력 예시>

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

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

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

 

- sc.nextInt(16): 16진법으로 받을 수 있음

 

 

 

# 1083 - 3 6 9 게임의 왕이 되자!

 

문제

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

 

입력

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

<입력 예시>

9

 

출력

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

<출력 예시>

1 2 X 4 5 X 7 8 X

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        
        for(int i=1;i<=n;i++){
            // 첫 번째 방법
            switch(i) {
                case 3: case 6: case 9:
                    System.out.printf("X ");
                    break;
                default :
                    System.out.printf("%d ",i);
                    break;
            }
            // 두 번째 방법
            if(i%3==0) {
                System.out.print("X"+" ");
            } else {
                System.out.print(i+" ");
            }
        }
    }
}

 

 

 

# 1084 - 빛 섞어 색 만들기

 

문제

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

빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때,
(빛의 강약에 따라 0 ~ n-1 까지 n가지의 빛 색깔을 만들 수 있다.)

주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과
총 가짓 수를 계산해보자.

 

입력

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

<입력 예시>

2 2 2

 

출력

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

<출력 예시>

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

 

< 내 코드 - 시간 초과 (오답)  >

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = 0;
        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.printf("%d %d %d\n",i,j,k);
                    count++;
                }
            }
        }
        System.out.println(sum);
    }
}

구글링을 해보니 BufferdReader와 BufferedWriter를 사용해서 해결해야한다고 해서 좀 더 공부하고 해결해야겠다!