Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 데이터분석
- 데이터 분석
- Brightics를 이용한 분석
- 삼성 SDS
- 삼성SDS Brigthics
- Brightics Studio
- Brightics
- 포스코 청년
- 삼성SDS
- 개인 의료비 예측
- 모델링
- 직원 이직여부
- Brigthics를 이용한 분석
- Brigthics Studio
- 캐글
- 혼공학습단
- 포스코 아카데미
- 혼공
- Brigthics
- 삼성SDS Brightics
- 직원 이직률
- 혼공머신러닝딥러닝
- 브라이틱스
- 브라이틱스 서포터즈
- 팀 분석
- 혼공머신
- 추천시스템
- 삼성 SDS Brigthics
- 영상제작기
- 노코드AI
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 2116번(구현, 브루트포스)_주사위 쌓기 본문
📌문제 유형
구현, 브루트포스 (골드 Lv.5)
📌문제
📌나의 문제풀이
- 너무 무지성 코드
- 1개의 주사위별로 마주보는 숫자 짝지어서 넣기
- 한 줄씩 비교해가며 맞닿아있는 숫자 꼬리물기
- 숫자 보면서 큰 숫자 ans에 더하기
n = int(input())
# 1개의 주사위별로 마주보는 숫자 짝지어서 넣기
dices = []
dices_set = []
for _ in range(n):
dice = list(map(int,input().split()))
dices.append(dice)
# 마주보는 것 짝지어서 넣기
set_ = []
set_.append((dice[0], dice[5]))
set_.append((dice[5], dice[0]))
set_.append((dice[1], dice[3]))
set_.append((dice[3], dice[1]))
set_.append((dice[2], dice[4]))
set_.append((dice[4], dice[2]))
dices_set.append(set_)
# 한 줄씩 비교해가며 맞닿아있는 숫자 꼬리물기
rules = []
for k in range(6):
next = dices_set[0][k]
rule = [next]
for j in range(n-1):
for i in range(6): #열의 개수
if next[1] == dices_set[j+1][i][0]:
next = dices_set[j+1][i]
rule.append(next)
break
rules.append(rule)
# num1,2 둘 다 6이 아닌 경우, 6 더하기
# (6,5)인 경우는 4 더하기 / (6,4) 아래 = 5 더하기
result = 0
for l in range(6):
ans = 0
for num1, num2 in rules[l]:
if num1 != 6 and num2 != 6:
ans += 6
elif num1 == 6:
if num2 == 5:
ans += 4
else:
ans += 5
elif num2 == 6:
if num1 == 5:
ans += 4
else:
ans += 5
if result < ans:
result = ans
print(result)
📌 다른사람의 문제풀이
- 인덱스 접근 방법
N = int(input())
dice = []
for _ in range(N):
dice.append(list(map(int, input().split())))
rotate = {0 : 5, 1 : 3, 2 : 4, 3 : 1, 4 : 2, 5 : 0} # 주사위의 아랫면에 따른 윗면 로테이션 등록(리스트 인덱스 기준)
maxnum = 0 # 최대값을 저장해둘 상수 선언
for i in range(6): # 첫 번째 주사위를 기준으로 1~6까지 모두 순회
result = [] #각 주사위마다 옆면의 최대값 1개를 저장해둘 리스트 선언
temp = [1, 2, 3, 4, 5, 6] # 주사위 각 면에 써져있는 1~6
temp.remove(dice[0][i]) # 주사위 아랫면의 숫자 제거
next = dice[0][rotate[i]] # 첫 번째 주사위의 윗면 값 계산
temp.remove(next) # 첫 번째 주사위의 윗면 값 삭제
result.append(max(temp)) # 첫 번째 주사위의 옆면들 중 가장 큰 값 삽입
for j in range(1, N): # 두 번째 주사위부터 마지막 주사위까지 반복
temp = [1, 2, 3, 4, 5, 6]
temp.remove(next) # 현재 주사위의 아랫면 숫자 제거
next = dice[j][rotate[dice[j].index(next)]] # 현재 주사위의 윗면 계산
temp.remove(next) # 현재 주사위의 윗면 삭제
result.append(max(temp)) # 현재 주사위의 옆면들 중 가장 큰 값 삽입
result = sum(result) # 각 주사위마다의 최대값을 모두 더한다.
if maxnum < result: # 이전의 최대값과 현재의 최대값을 비교하여 더 큰 값을 저장한다.
maxnum = result
print(maxnum)
📌 리뷰
- 정말 인덱스가 계속 헷갈리는 문제....
- (처음에 나도 다른 사람 문제풀이처럼 접근하다가 인덱스가 계속 헷갈려서 지금 방법으로 풀었다.)
- 인덱스 짝지어서 바뀔때에는 딕셔너리 사용하기!
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 16938번(브루트포스 알고리즘)_캠프 준비 (0) | 2023.09.12 |
---|---|
[백준/Python] 7576번(BFS)_토마토 (0) | 2023.09.08 |
[백준/Python] 13164번(그리디,정렬)_행복 유치원 (0) | 2023.09.05 |
[백준/Python] 6593번(BFS)_상범빌딩 (0) | 2023.09.05 |
[백준/Python] 3584번(DFS, 그래프 이론)_가장 가까운 공통 조상 (0) | 2023.08.17 |
Comments