🧾 Codetest/프로그래머스

[프로그래머스][Python][Lv0] 코딩테스트 입문 (5)

heywantodo 2023. 9. 14. 18:26
728x90
반응형

[프로그래머스][Python][Lv0] 코딩테스트 입문 (5)

너무 어려웠던 문제들 😢😢

 

1. 겹치는 선분의 길이

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

선분 3개가 평행하게 놓여 있습니다. 세 선분의 시작과 끝 좌표가 [[start, end], [start, end], [start, end]] 형태로 들어있는 2차원 배열 lines가 매개변수로 주어질 때, 두 개 이상의 선분이 겹치는 부분의 길이를 return 하도록 solution 함수를 완성해보세요.
lines가 [[0, 2], [-3, -1], [-2, 1]]일 때 그림으로 나타내면 다음과 같습니다.

선분이 두 개 이상 겹친 곳은 [-2, -1], [0, 1]로 길이 2만큼 겹쳐있습니다.

다른 사람의 풀이

def solution(lines):
    sets = [set(range(min(l), max(l))) for l in lines]
    return len(sets[0] & sets[1] | sets[0] & sets[2] | sets[1] & sets[2])
  • lines 배열의 최소 최대값을 범위로 두어 집합으로 둔다.
  • & 연산자로 교집합을 구한다.
  • 겹치는 선분들을 | 연산자로 합집합을 구해 총 길이(len)를 반환한다. 

 

2. 안전 지대

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

다음 그림과 같이 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류합니다.

지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재합니다. 지뢰가 매설된 지역의 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 return하도록 solution 함수를 완성해주세요.

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)

다시 풀어봐야 할 듯 😂

 

3. 평행

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(dots):
    [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] = dots 
    # 기울기 = |(y2 - y1) / (x2 - x1)|
    g12 = abs((y2-y1)/(x2-x1))
    g34 = abs((y4-y3)/(x4-x3))
    g23 = abs((y3-y2)/(x3-x2))
    g14 = abs((y4-y1)/(x4-x1))
    
    return 1 if g12 == g34 or g23 == g14 else 0
  • 직선의 기울기가 같으면 평행한다. dots의 각 요소들을 변수로 할당
  • 기울기를 구하여 하나라도 기울기가 같으면 1을 반환하고 다르면 0을 반환한다. 

 

4. 옹알이 (1)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import re

def solution(babbling):
    result = 0 
    for _ in babbling:
        a = re.sub(r'aya|ye|woo|ma','',_)
        if len(a) == 0:
            result += 1
    return result
  • 정규 표현식을 이용한 방법, 정규표현식 문법중에서 | 를 사용하면 앞뒤 패턴을 or 조건으로 지정한다.
  • re.sub 함수를 사용하여 'aya', 'ye', 'woo', 'ma' 가 문자열에 있으면 지운다.
  • 만약 문자열이 공백이라면 옹알이로 'aya','ye','woo','ma'가 조합된 문자이기때문에 결과에 1을 더한다.

 

끝~🎉

728x90
반응형