20240111/ programmers/ 0단계/ python

2024. 1. 11. 19:59·코딩테스트/programmers (python)

1. 코딩테스트 연습 - 다음에 올 숫자 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

 

나의 풀이 (실패 정확성 88.9%)

def solution(common):
    num=common[1]-common[0]
    if num>0:
        if common[2]-common[1]==num:
            return common[-1]+num
        else:
            return common[-1]*num
    else:
        if common[2]-common[1]==num:
            return common[-1]+num
        else:
            num=common[1]/common[0]
            return common[-1]*num

 

모범 답안

def solution(common):
    answer = 0
    if common[1] - common[0] == common[2] - common[1]:
        # 등차수열
        answer = common[-1]+(common[1]-common[0])
        
    elif common[1]/common[0] == common[2]/common[1]:
        # 등비수열
        answer = common[-1]*(common[1]/common[0])
    return answer

접근 방법은 같으나 공차나 공비가 음수인 경우 나눠서 생각 X

 

2. 코딩테스트 연습 - 연속된 수의 합 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.

 

나의 풀이

.

 

모범 답안

def solution(num, total):
    d=0
    for i in range(1, num):
        d += i
    start=(total-d)//num
    answer = [i for i in range(start, start+num)]
    return answer

 

3. 코딩테스트 연습 - 분수의 덧셈 | 프로그래머스 스쿨 (programmers.co.kr)

4. 코딩테스트 연습 - 주사위 게임 3 | 프로그래머스 스쿨 (programmers.co.kr)

나의 풀이

def solution(a, b, c, d):
    num=str(a)+str(b)+str(c)+str(d)
    numm=list(set(num))
    print(numm)
    lnum=len(numm)
    if lnum==1:
        score=1111*int(num[0])
    elif lnum==2:
        if num.count(numm[0])==1:
            score=(10*int(numm[1])+int(numm[0]))**2
        elif num.count(numm[1])==1:
            score=(10*int(numm[0])+int(numm[1]))**2
        else:
            score=(int(numm[0])+int(numm[1]))*abs(int(numm[0])-int(numm[1]))
    elif lnum==3:
        if num.count(numm[0])==2:
            score=int(numm[1])*int(numm[2]) 
        elif num.count(numm[1])==2:
            score=int(numm[0])*int(numm[2])
        else:
            score=int(numm[0])*int(numm[1]) 
    else:
        score=int(min(numm))
    return score

풀이 참고

def solution(a, b, c, d):
    nums = [a, b, c, d]
    counts = [nums.count(i) for i in nums]
    if max(counts) == 4:
        return a * 1111
    elif max(counts) == 3:
        p = nums[counts.index(3)]
        q = nums[counts.index(1)]
        return (10 * p + q) ** 2
    elif max(counts) == 2:
        if min(counts) == 2:
            return (a + c) * abs(a - c) if a == b else (a + b) * abs(a - b)
        else:
            p = nums[counts.index(2)]
            return (a * b * c * d) / p**2
    else:
        return min(nums)

5. 코딩테스트 연습 - 안전지대 | 프로그래머스 스쿨 (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 x:
                danger.update(
                    (i + di, j +dj)
                    for di in [-1, 0, 1]
                    for dj in [-1, 0, 1]
                    if 0 <= i + di < n and 0<= j + dj < n
                )
    return n*n - len(danger)

구현(응용) - 문제 1 안전지대 - 내일은 코딩테스트 실전문제 풀이 (youtube.com)

 

★ update() 함수 

   dict 자료형에 있는 함수로 기존 딕셔너리의 데이터를 한꺼번에 변경할 때 유용한 함수

  기존의 데이터를 수정할 수도, 추가할 수도 있음

 

[Python] 파이썬 dict 자료형의 update 함수 (tistory.com)

 

6. 코딩테스트 연습 - 겹치는 선분의 길이 | 프로그래머스 스쿨 (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):
    s1 = set(i for i in range(lines[0][0], lines[0][1]))
    s2 = set(i for i in range(lines[1][0], lines[1][1]))
    s3 = set(i for i in range(lines[2][0], lines[2][1]))

    return len((s1 & s2) | (s2 & s3) | (s1 & s3))

set을 이용해 각 선분의 길이를 집합으로 만들어 교집합을 찾음

 

☆ ☆ ☆ 7. 코딩테스트 연습 - 정수를 나선형으로 배치하기 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.

나의 풀이

.

 

모범 답안

def solution(n):
    dy = [0, 1, 0, -1]
    dx = [1, 0, -1, 0]
    y, x = 0, -1

    arr = [[0] * n for _ in range(n)]
    num = 1
    direction = 0
    while num <= n**2:
        ny, nx = y + dy[direction], x + dx[direction] 
        if 0 <= ny < n and 0 <= nx < n and not arr[ny][nx]:
            arr[ny][nx] = num
            num += 1
            y, x = ny, nx
        else:
            direction = (direction + 1) % 4

    return arr

 

8. 코딩테스트 연습 - 평행 | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

점 네 개의 좌표를 담은 이차원 배열  dots가 다음과 같이 매개변수로 주어집니다.

  • [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]

주어진 네 개의 점을 두 개씩 이었을 때, 두 직선이 평행이 되는 경우가 있으면 1을 없으면 0을 return 하도록 solution 함수를 완성해보세요.

나의 풀이 (실패 정확성 64.7%)

def solution(dots):
    dot=[]
    for i in range(1, len(dots)):
        dot.append((dots[0][1]-dots[i][1])/(dots[0][0]-dots[i][0]))
    for i in range(2, len(dots)):
        dot.append((dots[1][1]-dots[i][1])/(dots[1][0]-dots[i][0]))
    dot.append((dots[2][1]-dots[3][1])/(dots[2][0]-dots[3][0]))
    
    for i in dot:
        if dot.count(i)!=1:
            return 1
    return 0

 

모범 답안

def solution(dots):
    answer = 0
    dots_idx = [[0, 1, 3, 2], [0, 2, 3, 1], [1, 2, 0, 3]]
    for d1, d2, d3, d4 in dots_idx:
        x1, y1 = dots[d1][0], dots[d1][1]
        x2, y2= dots[d2][0], dots[d2][1]
        x3, y3= dots[d3][0], dots[d3][1]
        x4, y4= dots[d4][0], dots[d4][1]
        if (y1-y2)*(x3-x4) == (y3-y4)*(x1-x2) :
            answer = 1
    return answer

나는 경우의 수로 12번 비교를 해야 한다고 생각했으나 문제에서

아래와 같은 3가지 경우의 수만을 의미했음

  • [a-b, c-d],[a-c, b-d],[a-d, b-c]

즉, 4개의 점들로 임의의 두 쌍을 만들었을 때 그 두 쌍이 이루는 직선이 서로 평행한지를 묻는 문제

 

9. 코딩테스트 연습 - 옹알이 (1) | 프로그래머스 스쿨 (programmers.co.kr)

문제 설명

머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.

나의 풀이

.

모범 답안

from itertools import permutations
def solution(babbling):
    word=[]
    result=0
    speek=["aya", "ye", "woo", "ma"]
    for i in range(1, len(speek)+1):
        for j in permutations(speek, i):
            word.append("".join(j))
    for i in babbling:
        if i in word:
            result+=1

 

❗️permutations - 순열 함수

 

from itertools import permutations

A = ['a', 'b', 'c', 'd']
P = list(permutations(A, 2))

# P = [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

'코딩테스트 > programmers (python)' 카테고리의 다른 글

20240113/ programmers/ 1단계/ python  (1) 2024.01.13
20240112/ programmers/ 1단계/ python/O  (0) 2024.01.12
20240110/ programmers/ 0단계/ python  (0) 2024.01.10
20240109/ programmers/ 0단계/ python  (1) 2024.01.09
20240108/ programmers/ 0단계/ python  (0) 2024.01.08
'코딩테스트/programmers (python)' 카테고리의 다른 글
  • 20240113/ programmers/ 1단계/ python
  • 20240112/ programmers/ 1단계/ python/O
  • 20240110/ programmers/ 0단계/ python
  • 20240109/ programmers/ 0단계/ python
seulll
seulll
개인 공부 / 정리 블로그입니다 https://github.com/seul1009
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (345) N
      • 코딩테스트 (237) N
        • programmers (python) (158)
        • 백준 (python) (77) N
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (43)
        • Python (4)
        • Java | Spring (7)
        • Android (5)
        • Unity (3)
        • API (4)
      • CS (15)
        • Network (5)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    confusion matrix
    Boxplot
    카카오맵 api
    오블완
    야근 지수
    카카오맵
    웹크롤링
    백엔드 개발자 역량
    asterisk
    백엔드 개발자
    Python
    그리디 알고리즘
    프로그래머스
    API
    solving environment
    박스플롯
    프렌즈4블록
    파이썬
    kakao map api
    2 x n 타일링
    Greedy
    오차행렬
    데이터분석
    코딩테스트
    train_test_split
    티스토리챌린지
    백엔드
    대입 표현식
    바다코끼리
    모델 성능 평가
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
20240111/ programmers/ 0단계/ python
상단으로

티스토리툴바