- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다.
- 자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
- 사용자는 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4 이상일 경우 전진하고, 3 이하의 값이면 멈춘다.
- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한 명 이상일 수 있다.
경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분).
pobi,crong,honux
시도할 회수는 몇회인가요?
5
실행 결과
pobi : -
crong : -
honux : - (이후 중략)
pobi, honux가 최종 우승했습니다.
...
python으로 하면 흉내라도 낼 수 있을것 같다.
GPT안쓰고 하는게 최초의 목표였으나, 바로 포기.
Java에서 input문을 어떻게 쓰는지도 모르는 나는 첫 줄 부터 GPT를 켤 수 밖에 없었다...⭐
Java에서는 변수명을 런타임 중에 동적으로 생성할 수 없습니다.
알아보니 java.util.Scanner라는 클래스를 사용해야 했다.
import java.util.Scanner;
Scanner sc = new Scanner(System.in); // Scanner 객체 생성
String car1 = sc.next(); // 입력받은 문자열을 str에 저장
System.in은 입력한 값을 Byte 단위로 읽어주는 자바의 표준 입력 스트림이라고 한다. (당연히 처음 알았다)
next() : nextLinde() : next()와 달리 띄워쓰기를 할 수 있음자바로는 못한다. 해도 이건 내가 하는게 아니다.
그래도 나는 파이썬 심화반 강사이자 자격증반 담당이지 않는가!
해서 Pthhon으로 똑같이 구현하고 JAVA로는 GPT를 시켜서 비교해보기로 했다.

튜플 언패킹 : 하나 이상의 값을 튜플로 묶는 행위. 튜플 생성이라고도 한다.
튜플 언패킹 : 튜플에 묶여 있는 값들을 풀어내는 행위.
물론 튜플 언패킹을 진행할 때는 튜플에 저장된 값의 수와 이를 저장하는 변수의 수가 일치해야 한다.
nums = (1,2,3,4,5)
n1,n2, *others = nums # 둘 이상의 값을 리스트로 묶을 때 *를 사용한다.
n1
1
n2
2
others # 이렇듯 튜플이 아닌 리스트로 묶인다는 사실을 기억하자.
[3,4,5]
문제의 구문
carData = [[car, 0] for car in carList]
winners = [car for car, score in carData if score == max(car[1] for car in carData)]
print(f'\n{" ".join(winners)}가 최종 우승했습니다!')
for car, score in carData는 carData의 각 원소를 자동으로 분해하여 첫 번째 요소를 car, 두 번째 요소를 score에 할당한다!
튜플 언패킹 없이 명시적으로 작성하면 다음과 같다. 나는 이 방식이 아직 더 맞는것 같다.
winners = []
max_score = max(car[1] for car in carData)
for item in carData:
if item[1] == max_score:
winners.append(item[0])
이렇게 해서 Python으로 작성을 마쳤다!
import random as r
carList = input("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분) ").split(',') #pobi,crong,honux
carCount = len(carList)
carData = [[car, 0] for car in carList]
roundCount = int(input("시도할 회수는 몇회인가요?: "))
def printResult():
for car, progress in carData:
print(f'{car} : {"-"*progress}')
#시뮬레이션 실행
print("\n실행 결과")
for i in range(roundCount):
for car in carData:
if r.randrange(10) >= 4:
car[1] += 1
printResult()
print()
# winners = [car for car, score in carData if score == max(car[1] for car in carData)] #튜플 언패킹 적용
winners = []
max_score = max(car[1] for car in carData)
for item in carData:
if item[1] == max_score:
winners.append(item[0])
print(f'\n{" ".join(winners)}가 최종 우승했습니다!')
이제 JAVA로 바꾸는 일만 남았다.
그건 다음시간에...