강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ellin08171351
ellin08171351

câu hỏi đã được viết

Giới thiệu về giải bài toán bằng thuật toán Python (chuẩn bị cho bài kiểm tra viết mã)

9. Trò chơi xúc xắc

주사위게임(5분경)에서 질문드립니다.

Viết

·

262

2

저는 a,b,c정렬이 오름차순으로 이미 정렬되어있기에 두수가 같은 경우를 예를들면

2 2 5 이거나 3 5 5 식이 된다고 생각하고  a==b and b==c라는 if 문 보다는 a==b or b==c라는 if문을 통해  같은눈이 두개 나올때를가정했는데 이렇게 이해해도 괜찮을까요?

제가 이해한 바로는 a==c이면 가장 작은값인 a와 가장 큰값인 c가 값이 같아 결국 b도 값이 같아진다고 이해했습니다.

python코테 준비 같이 해요!

Câu trả lời 3

0

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

 break를 하고 싶다면 신호변수를 하나 두면 됩니다. 그리고 j인덱스값과 k인덱스 값이 같으면 arr[j]와 arr[k]가 같은 값을 가르키며 하나의 값을 가지고 서로 다른 두 개가 같은 것처럼 판단합니다 그래서 j값과 k값은 같은 값이 되게 반복하면 안됩니다.

아래 코드는 같은 눈이 2개일때인 elif문을 수정해보았습니다. 100점 나옵니다.

N = int(input())
dice = [list(map(int, input().split())) for _ in range(N)] #주사위수 2차원 배열
max_total = [] #상금 모아놓은 배열
for i in range(len(dice)):
    arr = dice[i]
    max_num = 0
    total = 0

    if  len(set(arr)) == 1: #주사위눈이 다같을때
        max_num = max(arr)
        total = 10000+(max_num)*1000
        max_total.append(total)
    elif len(set(arr)) == 2: #2개만 같을떄
        flag=False #신호변수 선언
        for j in range(len(arr)-1): #j값은 0과 1만 인덱스해도 됩니다
            for k in range(j+1, len(arr)): #k값은 j값과 같은 값을 가지면 안되므로 j+1로 시작해야 합니다.
                if arr[j] == arr[k]:
                    tmp = arr[j]
                    flag=True
            if flag: break
        total = 1000 + tmp * 100
        max_total.append(total)

    else: #다다를때
        max_num = max(arr)
        total = 1000 + (max_num) * 100
        max_total.append(total)

result = max(max_total)
print(result)

0

안녕하세요 강좌듣고 있는 학생입니다! 제가 구현한 코드 2번 테스트케이스가 에러뜨는데 한번 봐주실수 있을까요?

elif문이 문제인것 같은데 tmp에 값이 들어오면 멈추게 하고싶은데 for j 문이랑 나란하게 쓰니까 result = max(max_total) 에서 에러나고 (왜에러날까요?), for k문이랑 나란하게 쓰니까 2번 케이스에만 오류납니다. tmp 값들어오면  elif문안에 for문 멈추게 하는 방법없나요?ㅠㅠ 

N = int(input())
dice = [list(map(int, input().split())) for _ in range(N)] #주사위수 2차원 배열
max_total = [] #상금 모아놓은 배열
for i in range(len(dice)):
arr = dice[i]
max_num = 0
total = 0

if len(set(arr)) == 1: #주사위눈이 다같을때
max_num = max(arr)
total = 10000+(max_num)*1000
max_total.append(total)
elif len(set(arr)) == 2: #2개만 같을떄
for j in range(len(arr)):
for k in range(1, len(arr)):
if arr[j] == arr[k]:
tmp = arr[j]
break
total = 1000 + tmp * 100
max_total.append(total)

else: #다다를때
max_num = max(arr)
total = 1000 + (max_num) * 100
max_total.append(total)

result = max(max_total)
print(result)

0

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

기존 코드에서 a==b and b==c 조건은 3개의 수가 모두 같다는 조건으로 사용한 것입니다.  

강채희님의 코드를 올려주시면 좀더 정확하게 무엇을 질문한 것인지 알 수 있을 것 같습니다.  강채희님의 질문내용과 의견을 이해한대로 적용해본 코드입니다.  님의 의견처럼 정렬한 것을 최대한 활용해서 아래 코드처럼 짜면 기존코드보다 더 좋은 코드가 되는 것 같습니다. 좋은 의견 감사합니다^^

max=0
res=0
n=int(input())
for i in range(n):
    tmp=input().split() 
    tmp.sort() 
    a, b, c=map(int, tmp)
    if a==c:  # 3개의 값이 모두 같은 경우
        money=10000+(a*1000);
    elif a==b or b==c: # 2개의 수가 같은 경우 
        money=1000+(b*100)
    else:
        money=c*100
    if money > res:
        res=money

print(res)

Hình ảnh hồ sơ của ellin08171351
ellin08171351

câu hỏi đã được viết

Đặt câu hỏi