본문 바로가기
알고리즘

2023-04-27 가위바위보,25304번: 영수증,커트라인

by jung1911 2023. 4. 27.

문제

 

가위바위보를 while을 사용해서 만들어라

 

시도

if문을 이중구문으로 사용해서 만들면 된다

 

해결 및 문제점

비겼을 경우에 같은 걸 내는 문제점이 있음(computer) 비길때 break을 사용해서 게임을 끝내고 다시 게임을 시작하게 만들었다.

 

 

import random

options = ['가위', '바위', '보']
computer_choice = random.choice(options) #random.randint은 숫자만 가능하다. 문자일때 choice

while True:
    user_input = input('가위, 바위, 보 중에서 골라주세요: ')
    if user_input not in options: # 가위 , 바위 ,보 중 같은게 아닐경우 다시
        print('다시 입력하세요.')
        continue # 처음부터 다시 입력

    if user_input == computer_choice: # 코드의 가독성을 위해 비겼다 를 맨먼저 사용
        print('비겼습니다.')
        break
    elif user_input == '가위':        # 여기서 부터 복붙
        if computer_choice == '바위':
            print('졌습니다.')
            break
        else:
            print('이겼습니다!')
            break


    elif user_input == '바위':
        if computer_choice == '보':
            print('졌습니다.')
            break
        else:
            print('이겼습니다!')
            break


    elif user_input == '보':
        if computer_choice == '가위':
            print('졌습니다.')
            break
        else:
            print('이겼습니다!')
            break

print(f'당신은 {user_input}를 냈습니다.')
print(f'컴퓨터는 {computer_choice}를 냈습니다.')

 

 

 

문제

 

 

   

 

시도

 

  • 문제에서는 영수증과 총금액을 비교하고 싶어한다.  그러면 총금액과 물건의 종류의 수를 input값으로 받아준다.
  • 예제 입력을 보면 물건의 갯수 * 가격 을 해줘야한다.
  • 예제 에서는 총 4번을 곱했다. 물건의 종류도 4개이다.
  • 곱한 값 + total을 해주면 된다.
  • total 값과 총금액이 같으면 YSE 아니면 NO 

 

x = int(input()) 
n = int(input()) 
total = 0

for i in range(0,n):
    a,b= map(int,input().split())
    total += a*b

if total == x:
    print("YES")
else:
    print("NO")

 

 

문제

 

 

 

 

 

시도

 

  • 문제에서  n명의 학생들 중 k명은 상을 받을 것 이다 근데 커트라인 점수를 구해라 여기서 가장낮은 점수가 커트라인이다.
  • 예제 입력과 출력을 보면 5명 중에 2명 에게 상을 줄 것이고 커트라인 점수는 98점이다 라고 설명한다.
  • 점수는 뒤죽박죽이기 때문에 정렬을 사용해서 높은 순이든 낮은 순이든 정렬을 해주면 된다.
  • 입력 값에 2를 보자 2를 사용해 커트라인을 정해야한다. 만일 정렬이 되어있는 값에 거꾸로 슬라이싱 을 한다면?
  • 처음 부터 2를 지정한다면 0,1,2,3,4 로 시작하기 때문에 뒤집어서 (-1) 1 2 를 하면 손쉽게 값을 구할 수있다.
n,k = map(int,input().split())
x = list(map(int,input().split()))

x.sort()
a= x[-k]
print(a)

 

배운점

 

코드를 보면 x.sort() 를 하면 작은수 부터 76,85,93,98,100 나온다. 여기서 -k를 하면 뒤에서부터 (1,2) (100,98) 커트라인 값을 찾을 수 있다. 처음엔 sort를 큰값부터 정렬하고 -1값을 줘서 찾을려고 했는데 k에 -를 주면 뒤집어지는지 처음 알았다.

댓글