우아한테크코스 8기 프리코스

[우테코 최종코테준비] 8기 프리코스 2주차 자동차 경주게임

rlagudwls5518 2025. 12. 3. 22:00

오랜만에 2주차 자동차경주 문제를 풀어봤다. 

돌아가는 쓰레기만드는데 1시간 23분 걸렸다.

너무 금방 풀었는데;;

 


 🔎프로젝트 개요

 

자동차 이름을 입력해서 시도 횟수 만큼  규칙에 따라 전진시키고 우승자를 출력하는 게임


📌구현기능 목록

 

1. 주어진 횟수동안 n대의 차는 전진 또는 정지할 수 있다

  • 전진 조건은 무작위 수가 4이상일때만 전진한다
  • 4미만이면 그대로 

2. 자동차는 이름 부여가 가능하다

  • 실행결과 출력시 이름도 같이 출력한다
  • 이름을 입력할 수 있다
  • 입력시 구분자로 차 이름을 구별한다
  • 차 이름은 5글자 이내로 작성한다

3. 시도 횟수를 입력할 수 있다

  • 횟수에 따라 경기를 진행한다

4. 경주 완료 후 누가 우승자인지 보여준다

  • 거리가 제일 먼 사람이 우승자다
  • 우승자는 두명 이상일 수 있다

⚙️보완해야할 점

 

문제를 풀면서 설계미숙으로 인한 문제가 나왔다 

Car객체와 Cars객체와 Parsing이랑 Controller사이에서의

데이터를 어떻게 주고받아야할지 어어어 하다가 순간 멍해졌다

책임 분리가 명확하지 않았기 때문에 생각하다가 멍해진 것 같다..

근데 설계단계에서 어떻게 반환하고 어떻게 주는지까지 고려를 해야할까?

나는 기능목록만 작성하고 그냥 일단 해보는 스타일인데

다음에 풀때는 기능 목록 뿐아니라 어떤 역할을 하는 객체가 필요한지 정의하고 풀어야겠다. 헷갈린다..

3주차때 객체정리했었는데 자꾸 그냥 막해가지고..

 

 


2주차때 코드랑 오늘짠 코드랑 비교해달라고했는데 진짜 많이 발전했다는 것을 느꼈다.

2주차때 우승자 로직계산이었다 거의 지피티 돌리면서 해서 스트림도 잘모르는데 참;;

public static String calculateWinners(List<Car> cars) {
        int maxPosition = cars.stream()
                .mapToInt(Car::getDistance)
                .max()
                .orElse(0);

        String winners = cars.stream()
                .filter(car -> car.getDistance() == maxPosition)
                .map(Car::getName)
                .collect(Collectors.joining(","));
        return winners;
    }

 

 

오늘은 스트림을 쓰지않고 제일 먼거리를 찾고 그 거리만큼 간 애들까지 찾아서 리스트로 반환하는 로직으로 구현했다. 

이 방법도 자꾸내가 한꺼번에 생각하는 경향이 있어서;; 

무조건 단순하게 작게 생각을 해봤더니 이렇게 해도되나? 싶었지만 어찌저찌 돌아가서 다행이었다

	private int playerGetMaxDistance(){
        int maxDistance = 0;
        for(Car car : carList){
            if(maxDistance < car.getDistance())
                maxDistance = car.getDistance();
        }
        return maxDistance;
    }

    public List<String> winnerPlayers(){
        List<String> winnerPlayers = new ArrayList<>();
        int maxDistance = playerGetMaxDistance();
        for(Car car : carList){
            if(maxDistance == car.getDistance()){
                winnerPlayers.add(car.getCarName());
            }
        }
        return winnerPlayers;
    }

 

 

내일은 어제 오늘 코드짠거 리팩토링 좀더해서 정리해서 올리고 금요일부터 문제 다시 풀어야겠다

이제 예열 좀 했으니 금요일은 지하철 노선도 문제를 풀어봐야겠다

잠깐 봤는데 개어려워보이는디;;

 

 

 

발전했다~