본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 4

by Renechoi 2022. 12. 23.

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 4

 


반복문 

 

2단을 만들어보자 

 

// 구구단 2단 만들어보기 
for (int i = 1; i <= 9; i++) {
    System.out.printf("2 * %d = %d\n", i, 2 * i);
}

 

알고리즘 문제는 반복문, 배열, 재귀함수를 잘하면 잘 할 수 있다 ! 

 


반복문의 종류 3가지 

- do-while

- while

- for 

 

 

 

 

while 문 

while (조건식)
	실행 부분

조건식이 만족하는 동안 반복되고 실행부를 실행한다. 

 

초기식 -> 조건식 -> 명령문 -> 증감식(감소식) : 수직 방향 

 

1~10까지의 합을 while문으로 구해보기 

int sum = 0;
int i = 1;
while (i<=100){
    sum += i;
    i++;
}
System.out.printf("1 ~ 10 까지의 합 : %d", sum);

 


for 문 :

초기식 -> 조건식 -> 명령문 -> 증감식 : 수평구조 

 

for문의 무한 반복 : 

for (;;){}

 

 


 

랜덤 값을 구하기 

 

// TODO : 주사위의 값을 구해보자

int randomNumber = (int) ( Math.random() * 6 ) +1 ;
System.out.println(randomNumber);

 

 


랜덤 값을 이용해서 up down 게임을 만들어보자 .

 

 

main class

// TODO : UpDown 게임을 구현해보자.
// 임의의 난수를 생성 : 1~100 사이
// 키보드로부터 정수를 입력(1~100) => Validation check
// 입력한 숫자와 정답을 비교해서
// 정답을 맞추면 : good ! 몇 번 만에 성공
// 오답 : 입력 값보다 크다면 up, 작으면 down

Controller controller = new Controller();
controller.run();

RandomNumber randomNumber = new RandomNumber(100);
int generatedRandomNumber = randomNumber.getRandomNumber();

int count = 0;

while (true) {
    InputNumber inputNumber = new InputNumber();
    int userNumber = inputNumber.getInputNumber();
    count++;
    if (isMatch(userNumber, generatedRandomNumber, count)) {
        break;
    }
}

 

게임 로직 

 

private static boolean isMatch(int userNumber, int randomNumber, int count) {
    if (userNumber == randomNumber) {
        System.out.printf("축하합니다! %d번 만에 성공!", count);
        return true;
    }

    System.out.println("틀렸습니다");
    printHint(userNumber, randomNumber);
    return false;
}

private static void printHint(int userNumber, int randomNumber) {
    if (userNumber > randomNumber) {
        System.out.println("go down!");
        return;
    }
    System.out.println("go up!");
}

 

 

랜덤 넘버 객체 

 

package kosta.mission.mission06;

import java.util.Random;

public class RandomNumber {

    private final int randomNumber;

    public RandomNumber(int range){
        this.randomNumber = generateRandomNumber(range);
    }

    private static int generateRandomNumber(int range){
        Random random = new Random();
        return random.nextInt(range)+1;
    }

    public int getRandomNumber() {
        return randomNumber;
    }
}

 

input number 객체 

 

package kosta.mission.mission06;

import java.util.Scanner;

public class InputNumber {
    private static final Scanner scanner = new Scanner(System.in);
    private int inputNumber;
    private static final String NUMBER_RANGE_EXCEPTION = "number should be between 1 ~ 100";

    public InputNumber() {
        this.inputNumber = enterNumber();
        validate(inputNumber);
    }

    public static int enterNumber(){
        System.out.println("숫자를 입력하세요:");
        return scanner.nextInt();
    }

    private void validate(int number) {
        if (number<1 || number >100) {
            throw new IllegalArgumentException(NUMBER_RANGE_EXCEPTION);
        }
    }

    public int getInputNumber() {
        return inputNumber;
    }
}

 

 


continue 문을 이용해서 2의 배수와 3의 배수를 건너뛰기 

for (int i = 1; i <= 100; i++) {
    if (i % 2 == 0 || i % 3 == 0) {
        continue;
    }
    System.out.println(i);
}

 

 


 

중첩 for문 이용하기 

 

전체 구구단을 출력해보자.

 

  // TODO: 구구단 9단을 만들어보자

    for (int i = 2; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            System.out.printf("%d * %d= %d\n", i, j, i * j);
        }
    }
}

 

 

ax + by 방정식의 경우의 수를 구해보자. 

 

// 4x + 5y = 60 -> x, y의 모든 경우의 수를 구해보자

for (int x = 0; x < 60 / a; x++) {
    for (int y = 0; y < 60 / b; y++) {
        if (a * x + b * y == 60) {
            System.out.printf("x: %d, y: %d\n", x, y);
        }
    }
}

 

 

별을 찍어보자 

 

// 별을 찍어보자

for (int i = 1; i <= 5; i++) {
    for (int j = 0; j < i; j++) {
        System.out.print("*");
    }
    System.out.println();
}


for (int i = 5; i >= 1; i--) {
    for (int j = i; j >= 1; j--) {
        System.out.print("*");
    }
    System.out.println();
}

 

 


갤러그 문제를 풀어보자 ! 

 

[갤러그 문제]

 

고전게임을 잘하기로 소문난 두 형제 종현이와 종원이는 요새 갤러그라는 게임에

푹 빠져 있다. 현재 종현이와 종원이의 점수는 각각 A점과 B점이고, 종현이의 점수는

A는 종원이의 점수 B보다 높거나 같다. 종현이는 매일 점수가 2배씩 상승하지만,

노력파인 종원이는 종현이를 이기기 위해 쉬지 않고 연습한 결과 매일 점수가 3배씩

상승하는 능력을 갖추었다.

이때 며칠이 지나야 종원이가 종현이의 점수보다 높아질 수 있을까?

 

[입력]

첫 번째 줄에 테스트케이스의 수 T(1<= T<=50)가 주어진다.

각 테스트케이스마다 최초 종현이의 점수 A와 종원이의 점수 B가 각각 공백을 두고

주어진다. 단 최초 종현이의 점수 A는 종원이의 점수 B보다 크거나 같으면 1점

이상 5천점 이하의 점수이다. (A>=B, 1<=B<=5000)

 

[출력]

각 줄마다 "#T"(T는 테스트케이스 번호)를 출력한 뒤, 종원이의 점수가 종현이의 점수를

추월하게 되는데 필요한 일수를 출력한다.

 

[sample input]

3

7 1

8 3

4 4

 

[sample output]

#1 5 

#2 3

#3 1 

 

 

public static void main(String[] args) throws IOException {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        int testCase = Integer.parseInt(bufferedReader.readLine());
        int testCount = 0;
        while (testCase-- > 0) {
            StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
            int a = Integer.parseInt(stringTokenizer.nextToken());
            int b = Integer.parseInt(stringTokenizer.nextToken());

            int dayCount = 0;
            while (a >= b) {
                dayCount++;
                a = a * 2;
                b = b * 3;
            }

            testCount++;
            System.out.printf("#%d %d\n",testCount, dayCount);
        }
    }

 

 

반응형