주사위게임(5분경)에서 질문드립니다.
274
작성한 질문수 1
저는 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도 값이 같아진다고 이해했습니다.
답변 3
0
안녕하세요^^
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
안녕하세요^^
기존 코드에서 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)
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
0
76
2
스택에서 ')'을 만나는 경우
0
78
3
문제가 어디있나요?
0
64
2
변수 or 함수명
0
61
1
침몰하는 타이타닉 문제 질문입니다
0
56
1
AA.py 책점 에러
0
57
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
160
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
163
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
93
0
5번 틀림
0
113
0
오류원인?
0
98
0
리스트 선언
0
106
1
침몰하는 타이타닉(그리디) 문제 질문
0
109
1
알고리즘
0
69
1
코딩테스트
0
92
1
DFS 순서 질문드립니다.
0
125
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





