코딩 기초 트레이닝 - 3 days

Joonlaxy·2023년 11월 4일
0

겹치는 선분의 길이

첫인상

두 개 이상의 선분이 겹치는 경우.. 각 선분의 시작과 끝 범위내 원소들의 중복을 세면 되겠다.

가설1.

각 선분 범위내 정수 원소를 구한다.
각 선분간 겹치는 정수 원소를 센다.

def solution(lines):
    answer = 0
    elements = []
    
    for l in lines:
        for i in range(l[0], l[-1]):
            elements.append(i)
    seen = []
    cnt = []
    for i in elements:
        if i in seen:
            cnt.append(i)
        seen.append(i)
    return len(set(cnt))
        
    return answer

결론

후기

중복을 제거하기 위해 set() 함수를 사용해야한다.!

안전지대

첫인상!

우선 지뢰가 매설된 좌표를 구하는게 먼저겠지?

가설1.

step1. 매설된 지뢰의 개수와 좌표를 구한다.
step2. 인접 위치에 임의의 숫자를 넣어준다.
step3. 0의 개수만 카운트한다.!

def solution(board):
    answer = 0
    mine = []
    for index, col in enumerate(board):
        for _index, row in enumerate(col):
            if row == 1:
                mine += [[index, _index]]
    if board == [[1]]:
        return 0
    for _iter in mine:
        # 지뢰 좌, 우 위험지역 표시
        
        if _iter[1] == len(board)-1: #지뢰가 우측 끝에 존재할 경우:
            board[_iter[0]][_iter[1]-1] += 1
            loc = "right"
        elif _iter[1] == 0: #지뢰가 좌측 끝에 존재할 경우
            board[_iter[0]][_iter[1]+1] += 1
            loc = "left"
        else:
            board[_iter[0]][_iter[1]-1] += 1
            board[_iter[0]][_iter[1]+1] += 1
            loc = "center"
            
        if loc == "right":
            if _iter[0] == 0: #최상단에 지뢰가 매설 된 경우
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]-1] += 1
            elif _iter[0] == len(board)-1:
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]-1] += 1
            else:
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]-1] += 1
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]-1] += 1
        elif loc == "left":
            if _iter[0] == 0: #최상단에 지뢰가 매설 된 경우
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]+1] += 1
            elif _iter[0] == len(board)-1:
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]+1] += 1
            else:
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]+1] += 1
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]+1] += 1  
        elif loc == "center":
            if _iter[0] == 0: #최상단에 지뢰가 매설 된 경우
                board[_iter[0]+1][_iter[1]-1] += 1
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]+1] += 1
            elif _iter[0] == len(board)-1:
                board[_iter[0]-1][_iter[1]-1] += 1
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]+1] += 1
            else:
                board[_iter[0]-1][_iter[1]-1] += 1
                board[_iter[0]+1][_iter[1]-1] += 1
                board[_iter[0]+1][_iter[1]] += 1
                board[_iter[0]+1][_iter[1]+1] += 1
                board[_iter[0]-1][_iter[1]] += 1
                board[_iter[0]-1][_iter[1]+1] += 1 
    
    for i in board:
        for j in i:
            if j == 0:
                answer += 1
    return answer

결과

후기

1x1의 경우 예외로 조건문을 달아두었다.

profile
Come in here

0개의 댓글