1. 외계어 사전
문제 설명
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
예시
solution(["z", "d", "x"],["def", "dww", "dzx", "loveaw"])
>>> 1
나의 풀이
def solution(spell, dic):
cnt = 0
list= []
for d in dic:
for s in spell:
if s in d:
cnt+=1
else:
list.append(cnt)
cnt = 0
else:
if len(spell) in list:
return 1
else:
return 2
dic의 요소들 중 spell의 요소가 있으면 요소 하나에 cnt += 1을 한 뒤에 한 dic 요소 d 와 spell 전체 요소의 비교가 끝나면
리스트 list에 append한다. 또한 cnt = 0으로 다시 지정해준다.
spell의 모든 요소가 들어있으면 cnt 값은 len(spell)과 같기 때문에 len(spell)값이 있으면 1을 리턴하고 그 외에는 2를 리턴한다.
2. 안전 지대
문제 설명
다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.
지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다.
지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.
나의 풀이
def solution(board):
n = len(board)
rs = set()
for index1,i in enumerate(board):
for index2,j in enumerate(i):
if j == 1:
for k in range(-1,2):
for l in range(-1,2):
if -1<index1+k<n and -1<index2+l<n:
rs.add((index1+k,index2+l))
return n*n - len(rs)
우선 board는 n*n 형태의 행렬이라 생각하고 좌표를 통해 구하기 위해서 rs라는 집합 set()을 만들어
board를 인덱스값과 값으로 나누어 주는 for문을 통해 ( i,j ) 좌표에 j 값이 있는 것으로 설정하여 j 가 1일때
board의 범위를 벗어나지 않는다면(-1<index1+k<n and -1<index2+l<n) 집합 rs에 좌표값이 들어가도록 하였다.
만약 (3,2)의 위치에 1이 있다면(지뢰) (2,1) (2,2) (2,3) (3,1) (3,2) (3,3) (4,1) (4,2) (4,3) 은 위험지대이기 때문에 위와 같이
-1, 0, -1 을 더하여 위험지대를 구분 하였다.
이후 안전 지대를 계산하기 위해 전체 개수인 n * n 에서 위험지대 개수인 len(ls)를 뺐다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 MySQL Lv.4 자동차 대여기록 별 대여금액 구하기 (1) | 2023.12.03 |
---|---|
프로그래머스 MySQL Lv.4 특정기간동안 대여 가능한 자동차들의 대여비용 구하기 (4) | 2023.12.01 |
프로그래머스 Python Lv.1 기사단원의 무기 (4) | 2023.11.29 |
프로그래머스 Python Lv.1 바탕화면 정리 (0) | 2023.11.28 |
프로그래머스 Python Lv.1 햄버거 만들기 (6) | 2023.11.27 |