[TIL] 23.01.31

문종현·2023년 1월 31일
0

TIL

목록 보기
74/119
post-custom-banner

👉 오늘 한 일

  • 프로그래머스 문제풀이(level 0)
  • 프로그래머스 SQL 문제풀이

프로그래머스 문제풀이

1. 안전지대 📌

  • [프로그래머스] Lv.0 안전지대
  • 정답률 53%, try 3
  • 정확성 63 (테케 1,4,5,7 오답)
  • board와 같은 크기의 0 배열을 생성한 후 매핑하는 형태로 풀려고 했으나 테스트 케이스에서 막혔다..
import numpy as np
def solution(board):
    result = 0
    dim = np.zeros_like(board)
    row = -1
    for lst in board:
        row += 1
        for i,j in enumerate(lst):
            if j == 1:
                try:
                    dim[row][i] += 1
                    dim[row-1][i-1] += 1
                    dim[row-1][i] += 1
                    dim[row-1][i+1] += 1
                    dim[row][i-1] += 1
                    dim[row][i+1] += 1
                    dim[row+1][i-1] += 1
                    dim[row+1][i] += 1
                    dim[row+1][i+1] += 1
                except:
                    pass
    
    for z in dim.tolist():
        result += z.count(0)

    return result
  • 다른 사람 풀이
    • 정석적으로 DFS, BFS를 많이 사용하는 것 같다.
def solution(board):
    N = len(board)
    dx = [-1, 1, 0, 0, -1, -1, 1, 1]
    dy = [0, 0, -1, 1, -1, 1, -1, 1]

    #지뢰가 설치된 곳
    booms = []
    for x in range(N):
        for y in range(N):
            if board[x][y] == 1:
                booms.append((x, y))

    #지뢰가 설치된 곳 주변에 폭탄 설치
    for x, y in booms:
        for i in range(8):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < N and 0 <= ny < N:
                board[nx][ny] = 1

    #폭탄이 설치되지 않은 곳만 카운팅
    count = 0
    for x in range(N):
        for y in range(N):
            if board[x][y] == 0:
                count += 1

    return count

2. 문자열 정렬하기 (2)

  • 정답률 84%
def solution(my_string):
    my_string = ''.join(sorted(my_string.lower()))
    return my_string

3. 합성수 찾기

  • 정답률 83%
def solution(n):
    result = 0
    lst = [num for num in range(4, n+1)]
    
    for i in lst:
        m = []
        for j in range(2, i+1):
            if i % j == 0:
                m.append(j)
        if len(m) != 1:
            result += 1
            
    return result
  • 다른 사람 풀이
    • 에스토스테네스의 체 활용(시간효율성 up)
def solution(n):
    output = 0
    for i in range(4, n + 1):
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                output += 1
                break
    return output

4. 모스부호 (1)

  • 정답률 83%
def solution(letter):
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}
    trans = []
    letter = letter.split()
    
    for l in letter:
        trans.append(morse[l])
    result = ''.join(trans)
    return result

SQL

1. 상위 n개 레코드

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

2. 여러 기준으로 정렬하기

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY NAME, DATETIME DESC

3. 모든 레코드 조회하기

SELECT *
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글