풀스택 개발자 과정 44일차

너구·2026년 7월 9일

풀스택 성장과정

목록 보기
47/79

Q1

package Day07;

// 올림픽 선수
// 나라, 레인번호, 전진거리(속성)
// 돌발 상황 체크(기능) + 이동

import java.util.Random;

class Player{
    String country;
    int num;
    int m;

    Player(String country, int num, int m) {
        this.country = country;
        this.num = num;
        this.m = m;
    }
    // 돌발상황
    void runAndDol(int dol, Random r) {
        int move = r.nextInt(10)+1;
        if (dol == num) {
            System.out.print(country + " 돌발상황 발생!!!");
            System.out.println("의 이동거리: " + m);
        } else {
            m += move;
            System.out.println(country + "의 이동거리: " + m);
        }
    }
}

public class Q1 {
    static void main() throws InterruptedException {
        // 돌발상황 -> Random
        Random r = new Random();

        Player kor = new Player("한국", 1, 0);
        Player chi = new Player("중국", 2, 0);
        Player usa = new Player("미국", 3, 0);
        Player rus = new Player("러시아", 4, 0);

        while (kor.m < 100 && chi.m < 100 && usa.m < 100 && rus.m < 100) {
            // 돌발상황 발생한 레인
            int dol = r.nextInt(4)+1;
            // 선수들 이동해주고
            kor.runAndDol(dol,r);
            Thread.sleep(100);
            chi.runAndDol(dol,r);
            Thread.sleep(100);
            usa.runAndDol(dol,r);
            Thread.sleep(100);
            rus.runAndDol(dol,r);
        }
        // 우승국 출력
        if (kor.m > chi.m && kor.m > usa.m && kor.m > rus.m) {
            System.out.println("한국이 우승했습니다.");
        }
        if (chi.m > kor.m && chi.m > usa.m && chi.m > rus.m) {
            System.out.println("중국이 우승했습니다.");
        }
        if (usa.m > chi.m && usa.m > kor.m && usa.m > rus.m) {
            System.out.println("미국이 우승했습니다.");
        }
        if (rus.m > chi.m && rus.m > usa.m && rus.m > kor.m) {
            System.out.println("러시아가 우승했습니다.");
        }
    }
}

ClassTest

package Day07;

class A {
    B b;
    B makeB() {
        b = new B();
        return b;
    }
}

class B {
    int k;
}

public class ClassTest1 {
    static void main() {

        A a = new A();
        B b = a.makeB();
        b.k = 20;
        B b1 = a.makeB();
        a.b.k = 30;
        System.out.println(b.k);
        System.out.println(a.b.k);
    }
}

Q2

package Day07;

// 파란 주사위 빨간 주사위가 2개가 있다.
// 주사위를 굴렸을 때 둘 중 하나가 50 숫자를 넘으면 종료
// 승리 주사위 출력

// 시간 부족으로 문제풀기 실패

import java.util.Random;

class Dice1 {
    String color;
    int num;
    int sum = 0;

    Dice1(String color, int num) {
        this.color = color;
        this.num = num;
    }

    void rollDice (Random r) {
        int randomNum = r.nextInt(6)+1;

        if (sum <= 50) {
            sum = sum + randomNum;
        }
    }
}

public class Q2 {
    static void main() {

        Random r = new Random();

        Dice1 redDice = new Dice1("RED", r.nextInt(6)+1);
        Dice1 blueDice = new Dice1("BLUE", r.nextInt(6)+1);

        redDice.rollDice(r);
        blueDice.rollDice(r);
    }
}

Q2 선생님 풀이

package Day07;

import java.util.Random;

// 주사위
class Dice {
    String color;

    Dice(String color) {
        this.color = color;
    }
    // 주사위를 돌린다.
    int diceRun() {
        Random r = new Random();
        return r.nextInt(6)+1;
    }
}

public class Q2_1 {
    static void main() {
        Dice red = new Dice("빨간색");
        Dice blue = new Dice("파란색");

        int redTotal = 0;
        int blueTotal = 0;

        while (redTotal < 50 && blueTotal < 50) {
            redTotal += red.diceRun();
            blueTotal += blue.diceRun();

            System.out.println(red.color + " 주사위: " + redTotal);
            System.out.println(blue.color + " 주사위: " + blueTotal);
            System.out.println("================");
        }

        if (redTotal > blueTotal) {
            System.out.println(red.color + " 주사위 승리");
        } else {
            System.out.println(blue.color + " 주사위 승리");
        }
    }
}

classArrayTest

package Day07;

// 클래스 배열

class Z{
    int a;
}

public class classArrayTest {
    static void main() {
        Z[] z = new Z[5];
        z[0] = new Z();
        z[0].a = 10;

        int[] array = new int[5];
        array[0] = 10;
    }
}

MethodOverloading

package Day07;

class MOver {
    int add(int a, int b) {
       return a + b;
    }
    /* 안됨
    void add(int a, int b) {
        System.out.println(a + b);
    }
     */
    // 됨
    int add(double a, double b) {
        return (int)(a + b);
    }
}

public class MethodOverloading {
    static void main() {
        MOver m = new MOver();

        // 사용자 입장에서 부를 때 편함
        m.add(5, 7);
        m.add(7.8, 9.0);
    }
}

ConOverloading

package Day07;

class ConO {
    ConO(int a) {

    }
    ConO(String a) {

    }
}

public class ConOverloading {
    static void main() {
        ConO con01 = new ConO(5);
        ConO con02 = new ConO(4);
        ConO con03 = new ConO(3);
        ConO con04 = new ConO(2);
        ConO con05 = new ConO("hello");
    }
}

Q3

package Day07;

// 마피아 게임
// 시민 5명중 1명이 마피아, 랜덤으로 선택된다.
// 경찰 -> 마피아를 선택하는 변수

import java.util.Random;

class Police {
    int pickNum;
}

class Person {
    int num;

    Person(int num) {
        this.num = num;
    }
}

public class Q3 {
    static void main() {

        Random r = new Random();
        int mafiaNum = r.nextInt(5) + 1;

        Person person1 = new Person(1);
        Person person2 = new Person(2);
        Person person3 = new Person(3);
        Person person4 = new Person(4);
        Person person5 = new Person(5);

        Police police = new Police();

        for (int i = 1; i <= 5; i++) {
            police.pickNum = i;
            if (police.pickNum == mafiaNum) {
                System.out.println(i + "번 사람은 마피아입니다.");
            } else {
                System.out.println(i + "번 사람은 마피아가 아닙니다.");
            }
        }
    }
}

Q3 선생님 풀이

package Day07;

import java.util.Random;
import java.util.Scanner;

// 시민 -> 마피아
class Citizen{
    // 중요한 거
    // 1. 번호
    int num;
    // 2. 마피아 여부를 알려주는 변수
    boolean check;

    Citizen(int num) {
        this.num = num;
    }
    // 3. 경찰 나에게 질문을 하면 마피아인지 아닌지 알려줌(기능)
    void talk() {
        if (check) {
            System.out.println("내가 마피아다");
        } else {
            System.out.println("억울하다. 나는 마피아가 아니다.");
        }
    }
}
// 경찰
class Police1{
    // 입력
    int mafiaCheck() {
        Scanner sc = new Scanner(System.in);
        System.out.print("마피아는?");
        return sc.nextInt();
    }
}

public class Q3_1 {
    static void main() {
        Citizen c1 = new Citizen(1);
        Citizen c2 = new Citizen(2);
        Citizen c3 = new Citizen(3);
        Citizen c4 = new Citizen(4);
        Citizen c5 = new Citizen(5);

        Random r = new Random();
        int ran = r.nextInt(5)+1;

        if (c1.num == ran) {
            c1.check = true;
        } else if (c2.num == ran) {
            c2.check = true;
        } else if (c3.num == ran) {
            c3.check = true;
        } else if (c4.num == ran) {
            c4.check = true;
        } else {
            c5.check = true;
        }

        Police1 p = new Police1();

        while (true) {
            int select = p.mafiaCheck();
            if (select > 0 && select < 6) {
                if (c1.num == select) {
                    c1.talk();
                    if (c1.check) {
                        break;
                    }
                } else if (c2.num == select) {
                    c2.talk();
                    if (c2.check) {
                        break;
                    }
                } else if (c3.num == select) {
                    c3.talk();
                    if (c3.check) {
                        break;
                    }
                } else if (c4.num == select) {
                    c4.talk();
                    if (c4.check) {
                        break;
                    }
                } else {
                    c5.talk();
                    if (c5.check) {
                        break;
                    }
                }
            } else {
                System.out.println("잘못된 입력입니다.");
            }
        }
    }
}

개인 공부

Q1

package Practice3;

/*
캐릭터는 다음 정보를 가진다.
-> 이름 레벨 경험치

1. gainExp() 경험치를 얻는다.
조건: 경험치를 추가한다.
경험치가 100 이상이면 레벨이 1 증가한다.
레벨업하면 경험치는 0으로 초기화한다.

2. checkLevel() 현재 상태를 출력한다.
출력 예: 이름: 기사
레벨: 2
경험치: 30
 */

class Character {
    String name;
    int lev;
    int ex;

    Character(String name, int lev, int ex) {
        this.name = name;
        this.lev = lev;
        this.ex = ex;
    }

    void checkCharacter() {
        System.out.println("이름: " + name);
        System.out.println("레벨: " + lev);
        System.out.println("경험치: " + ex);
    }

    void gainEx(int moreEx) {
        ex += moreEx;
        if (ex >= 100) {
            System.out.println("경험치: " + ex + " + " + moreEx);
            System.out.println();
            System.out.println("🎉 레벨업! 🎉");
            lev += 1;
            ex = 0;
            System.out.println();
            checkCharacter();
        } else {
            System.out.println(moreEx + " 획득");
            System.out.println("현재 경험치: " + ex);
        }
    }
}

public class Q1 {
    static void main() {
        Character c1 = new Character("양밥풀", 1, 50);

        c1.checkCharacter();
        c1.gainEx(10);
        c1.gainEx(30);
        c1.gainEx(100);
    }
}

Q2

package Practice3;
/*
펫키우기 게임
1. feed()
조건: 밥을 먹으면 배고픔 수치가 20 감소한다.
배고픔 수치가 0보다 작아지면 0으로 만든다.
체력이 10 증가한다.

2. play()
놀면 배고픔 수치가 30 증가한다.
체력이 20 감소한다.
체력이 0 이하가 되면 "펫이 지쳤습니다." 출력

3. checkStatus() 현재 상태 출력
예:
이름: 초코
체력: 80
배고픔: 40
 */


class Pet {
    String name;
    int hp;
    int hungry;

    Pet(String name, int hp, int hungry) {
        this.name = name;
        this.hp = hp;
        this.hungry = hungry;
    }

    void feed() {
        hungry -= 20;
        hp += 10;
        System.out.println(name + "이가 밥을 먹었습니다! 🍖");
        if (hungry < 0) {
            hungry = 0;
            System.out.println(name +"이는 이제 배고프지 않습니다! 🐾");
        }
        checkStatus();
    }

    void play() {
        hungry += 30;
        hp -= 20;
        if (hp <= 0) {
            System.out.println(name + "이가 지쳤습니다. 🧟‍♂️");
        }
        checkStatus();
    }

    void checkStatus() {
        System.out.println("이름: " + name);
        System.out.println("체력: " + hp);
        System.out.println("배고픔: " + hungry);
    }
}

public class Q2 {
    static void main() {

        Pet p = new Pet("밥풀", 100, 50);

        p.checkStatus();
        System.out.println();
        p.feed();
        System.out.println();
        p.play();
        System.out.println();
        p.play();
        System.out.println();
        p.checkStatus();
    }
}

Q3

package Practice3;
/*
    RPG 전투 게임 ⚔️

    조건: 플레이어와 몬스터가 싸우는 프로그램을 만든다.

    [Player 클래스]
    - 필드: 이름, 체력, 공격력
    - attack(Monster monster) 메서드 생성
      → 몬스터의 체력을 공격력만큼 감소
      → 몬스터 체력이 0 이하이면 처치 출력
      → 아니면 남은 체력 출력

    [Monster 클래스]
    - 필드: 이름, 체력
    - 생성자로 값 초기화

    [main]
    - 플레이어 객체 생성
    - 몬스터 객체 생성
    - 플레이어가 몬스터를 여러 번 공격
*/

class Player {
    String name;
    int hp;
    int power;

    Player(String name, int hp, int power) {
        this.name = name;
        this.hp = hp;
        this.power = power;
    }

    void attack(Monster monster, Player player) {
        System.out.println("🏹 " + name + "이가 " + monster.name + "를 공격했다!" + " 🏹");
        System.out.println("🩸 " + "데미지: " + monster.hp + " - " + player.power + " 🩸");
        monster.hp -= player.power;
        if (monster.hp <= 0) {
            monster.hp = 0;
            System.out.println(monster.name + "의 체력이" + " 0이 되었습니다..." + " 👼");
        } else {
            System.out.println(monster.name + " 체력: " + monster.hp + " 😾");
        }
    }
}

class Monster {
    String name;
    int hp;

    Monster(String name, int hp) {
        this.name = name;
        this.hp = hp;
    }

    void checkMonster() {
        System.out.println("몬스터: " + name);
        System.out.println(" 체력: " + hp);
    }
}

public class Q3 {
    static void main() {
        Player p1 = new Player("밥풀", 100, 30);
        Monster m1 = new Monster("길고양이", 100);

        p1.attack(m1, p1);
        System.out.println();
        p1.attack(m1, p1);
        System.out.println();
        p1.attack(m1, p1);
        System.out.println();
        p1.attack(m1, p1);
        System.out.println();
        p1.attack(m1, p1);

        // 개선할 부분
        // for문을 활용해서 출력하기
        for (int i = 0; i < 5; i++) {
            p1.attack(m1, p1);
        }

    }
}

마무리

복잡하다. 근데 재밌다. 선생님이 설명해주시는 걸 못알아먹어도 재밌다.
지피티랑 객체화 문제를 푸는 시간이 가장 재밌었다.
조금 더 시간이 많았으면 좋았을텐데
얼른 내가 java에 더 익숙해져서 짧은 시간 내에도 많은 문제를 풀고 싶다!

0개의 댓글