20.07.16 00:14 작성
·
180
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도 값이 같아진다고 이해했습니다.
답변 3
0
2020. 09. 21. 15:27
안녕하세요^^
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
2020. 07. 16. 08:32
안녕하세요^^
기존 코드에서 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)