250x250
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
- sql
- onClick
- 우선순위
- with\
- gitignore
- Iterator
- 함수성능평가
- 함수실행시간
- venv
- itertools
- python
- googlesheet
- target
- time()
- 가상환경
- AI 5기
- googleappscript
- WIL
- Level1
- A태그
- vscode
- AI
- 내일배움캠프
- 프로그래머스
- iterable
- cte
- git #github #내일배움캠프
- 알고리즘
- Display
- position
Archives
- Today
- Total
05의 개발 계발
[페어프로그래밍] 230424 안전지대 | set for if len list range 본문
728x90
페어프로그래밍 결과 코드
# 페어프로그래밍으로 제작한 코드
def solution(board):
#한 변의 길이 N과 전체지역 total_zone
N=len(board)
total_zone_count = N**2
# 위험지역을 저장할 리스트
list_danger=[]
for x in range(N):
for y in range(N):
if board[x][y] == 1: # 폭탄위치 판별
list_danger.append((x,y)) # 폭탄위치 저장
list_danger.append((x-1,y+1)) # 1시
list_danger.append((x,y+1)) # 3시
list_danger.append((x+1,y+1)) # 5시
list_danger.append((x+1,y)) # 6시
list_danger.append((x+1,y-1)) # 7시
list_danger.append((x,y-1)) # 9시
list_danger.append((x-1,y-1)) # 11시
list_danger.append((x-1,y)) # 12시
danger_zone = set(list_danger) #중복제거
dzone = list(danger_zone)
real_dzone = []
for z in range(len(dzone)):
if dzone[z][0] < N and dzone[z][1] < N and dzone[z][0] >= 0 and dzone[z][1] >= 0:
real_dzone.append(dzone[z])
danger_zone_count = len(real_dzone)
safe_zone_count = total_zone_count - danger_zone_count
return safe_zone_count
팀원의 리팩토링 코드
# 팀원의 또다른 풀이
# max와 min을 활용하여 위험지대지정 , 위험지대의 값을 -1로 변경 후 count(0)로 안전지대카운트
'''
이때, 위험지대를 -1로 한 이유는,
board가 <list>로 mutable 하기에 1로 할 경우 11번 코드단에서 다시 걸리게 되므로
이를 방지하기 위해 다른 값을 사용한 것으로 추측된다.
'''
def solution(board):
answer = 0
for y in range(len(board)):
for x in range(len(board[y])):
# 이차원 배열의 좌표화
if board[x][y] == 1:
# 보드 안에 있는 한 점이 지뢰일 경우
for j in range(max(y-1,0),min(y+2,len(board))):
for i in range(max(x-1,0),min(x+2,len(board))):
# 최솟값과 최댓값의 범위
if board[i][j] == 1:
continue
board[i][j] = -1
# 지뢰 주변 값들의 위험지대화
for i in board:
answer += i.count(0)
return answer
흠터레스팅 코드
# 1번 | enumerate set 리스트컴플리헨션
'''
+enumerate를 활용해 순서(i,j)를 연산에 활용하였다
+set()에 update로 위험지대를 바로 담아서 set의 특성으로 중복을 제거하였다
+비교연산자(부등호)를 합쳐서 표현하였다
+리스트 컴플리헨션을 잘 활용하였다
-14~15번 코드단에서 사용한 변수명 i,j를 19번 코드단에서 재사용한 부분은 가독성을 조금 해치는 것 같다
'''
def solution(board):
n = len(board)
danger = set()
for i, row in enumerate(board):
for j, x in enumerate(row):
if not x:
continue
danger.update((i+di, j+dj) for di in [-1,0,1] for dj in [-1, 0, 1])
return n*n - sum(0 <= i < n and 0 <= j < n for i, j in danger)
시사점 or 새로이 알게된 점
*enumerate 를 연산에 활용해보자.
*리스트 컴프리헨션에서 for문의 중첩 사용을 활용해보자.
*if 문을 필터로 활용하려면 continue를 활용하여 거르는 용도로만 사용해도 된다.
*0 <= i < n 과 같이, 세 개의 인자를 비교하는 부등호 문장도 파이썬은 인식한다!
728x90
'내일배움캠프 AI > 페어프로그래밍' 카테고리의 다른 글
[페어프로그래밍] 230426 문자열 정렬하기(2) | lower sorted join (0) | 2023.04.27 |
---|---|
[페어프로그래밍] 230425 캐릭터의 좌표 | if for max min int / abs dict (0) | 2023.04.25 |
[페어프로그래밍] 230421 인덱스바꾸기 + 배열의 유사도 | 컴프리헨션, python 다중할당 (0) | 2023.04.21 |
[페어프로그래밍] 230420 하샤드 수 | for sum if (코루틴적용) (0) | 2023.04.20 |
[페어프로그래밍] 230419 문자열 정렬하기(1) | for try-except int (4) | 2023.04.19 |