반응형
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 | 29 | 30 |
Tags
- 인공신경망 학습
- 비트마스킹
- 인공지능 경진대회
- 로지스틱 최대우도
- 프로그래머스 누적합
- MLE
- 확률과우도
- 카카오 메뉴리뉴얼
- 프로그래머스 스타수열
- 딥러닝
- 2차원동전뒤집기
- 딥러닝파라미터
- 프로그래머스
- 머신러닝 학습 검증
- 스타수열 파이썬
- 과적합방지
- 데이터축소
- 프로그래머스 2차원동전뒤집기 파이썬
- 프로그래머스광고삽입
- 스타수열
- 메뉴리뉴얼 파이썬
- 광고삽입 파이썬
- k겹 교차검증
- 모델경량화
- 카카오 코테 메뉴리뉴얼
- 프로그래머스 2차원동전뒤집기
- 딥러닝 가중치 갱신
- 자율성장 인공지능
- AI경량화
- 딥러닝학습
Archives
- Today
- Total
머신러닝 개발자의 러닝머신
[2018 Kakao Blind Recruitment] 프렌즈 4블록 (Pytho) 본문
반응형
<문제 유형>
해야할 것 많은 구현
<해결 방법>
- 터지는 블록의 크기가 2*2로 정해져 있으므로 bfs나 dfs를 사용하지 않고 board 한번씩 훑으면서 터지는 블록 여부 확인
1. while 더이상 없을 때까지 (2*2 윈도우 사이즈로 board 검사하면서 터지는 블록 있는지 확인)
2. 터지는 블록있으면 dic에 좌표 추가해준다.
3. 맵을 한번 훑은 뒤 board 갱신
: dic 을 set() 형태로 바꿔주어 중복제거
: dic에 있는 좌표들의 board값을 "None"으로 바꿔준다.
4. len(dic)만큼 answer 에 더해준다
5. board 빈칸 채우기 : 아래쪽 행부터 확인하면서 빈칸이 있으면 빈칸이 아닌 칸까지 탐색하여 빈칸이 몇칸인지 num+= 해주고, none이 아닌 값들을 하나씩 빈칸의 갯수 칸 수만큼 내려준다. 이를 마친 뒤 다음 행의 빈칸이 있는지 확인하고 0행이 될때까지 반복해서 한 열당 모든 빈칸을 내려준다.
-> 코드 디벨롭, 빈칸의 다음 모든 칸을 내리지말고, 빈칸의 갯수만큼만 none이 아닌 값들을 내리고,
그 인덱스부터 다시 시작..
def solution(m, n, board):
answer = 0
# 보드 문자 단위로 잘라서 리스트화
new = []
for i in range(m):
row = list(board[i])
new.append(row)
board = new
able = 0
while able == 0:
dic = {}
able = 1
# for문 돌면서 터지는 블록 하나라도 발견되면 able = 0으로 바꾸고 while문 탈출
for i in range(m-1, 0, -1):
for j in range(n-1):
if board[i][j] == 'None' or board[i][j+1] == 'None' or board[i-1][j] == 'None' or board[i-1][j+1] == 'None':
continue
if board[i][j] == board[i][j+1] and board[i][j+1] == board[i-1][j+1] and board[i-1][j+1]==board[i-1][j]:
able = 0
if board[i][j] in dic:
dic[board[i][j]].append((i, j))
dic[board[i][j]].append((i, j+1))
dic[board[i][j]].append((i-1, j))
dic[board[i][j]].append((i-1, j+1))
else:
dic[board[i][j]] = [(i, j), (i, j+1), (i-1, j), (i-1, j+1)]
if able == 0:
# 블럭 터트리기
for key in dic.keys():
tmp = set(dic[key]) #좌표 중복 제거를 위해 set 타입으로 바꿔줌
answer += len(tmp)
dic[key] = list(tmp)
for x, y in dic[key]:
board[x][y] = 'None'
#아래로 내리기
for j in range(n):
for i in range(m-1, -1, -1):
if board[i][j] == 'None':
blank = 0
for k in range(i-1, -1, -1):
if board[k][j] != 'None':
break
blank += 1
num = 0
for k in range(i-blank-1, -1, -1):
board[i-num][j] = board[k][j]
board[k][j] = 'None'
num += 1
# for i in range(m):
# print("".join(board[i]))
return answer
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스: 인사고과] (Python) (0) | 2023.04.11 |
---|---|
[2023KAKAO BLIND RECRUITMENT-개인정보 수집 유효기간] (Python) (0) | 2023.04.11 |
[2023KAKAO BLIND RECRUITMENT-택배 배달과 수거하기] (0) | 2023.04.11 |
[2023KAKAO BLIND RECRUITMENT 이모티콘 할인행사]-Python (0) | 2023.04.11 |
[2020 카카오 인턴십] 수식 최대화 (0) | 2022.08.05 |