2022년 4월 3일

알고리즘


프로그래머스 '괄호 회전하기' 문제를 풀었습니다.

def isCorrect(s):
    l = []
    # 리스트를 스택으로 활용하여 올바른 괄호인지 검사
    for c in s:
        if c == '[' or c == '{' or c == '(':
            l.append(c)
        else:
            if len(l) <= 0:
                return False
            t = l.pop()
            if c == ']' and t != '[':
                return False
            if c == ')' and t != '(':
                return False
            if c == '}' and t != '{':
                return False
    if len(l) > 0:
        return False
    return True

def solution(s):
    answer = 0
    for _ in range(len(s)):
        s = s[1:] + s[0]
        if isCorrect(s):
            answer += 1
    return answer

위는 제가 작성한 해답 코드인데, 우선 넘어온 문자열이 올바른 괄호 문자열인지 검사하는 함수를 만들고, 문제에서 주어진 문자열을 바꿔가며 검사하는 방식으로 해결하였습니다.

from collections import deque

def check(s):
    while True:
        if "()" in s: s=s.replace("()","")
        elif "{}" in s: s=s.replace("{}","")
        elif "[]" in s: s=s.replace("[]","")
        else: return False if s else True       

def solution(s):
    ans = 0
    que = deque(s)

    for i in range(len(s)):
        if check(''.join(que)): ans+=1
        que.rotate(-1)
    return ans

다른 분의 해답 코드 입니다.
문자열을 검사하는 함수 부분을 반복적으로 검사하여 replace함수를 통해 기본 단위의 괄호를 전부 제거하는 방식 으로 구현한 부분이 인상깊었습니다.

시간복잡도는 크지만 코드가 간결해지고 가독성이 좋다 고 생각합니다.

또한 문자열을 왼쪽으로 한칸씩 shift하는 방식도 deque의 rotate함수를 사용하여 구현한 부분도 좋은 방법인 것 같습니다.


데이터베이스


데이터베이스 강의에서는 SQL query명령어 중 'SELECT' 에 관한 내용을 공부했습니다.

SELECT 뒤에 컬럼(attribute) 을 서술하고 from 뒤에 테이블 이름 을 서술하는부분 까지는 필수이고, 그 뒤에는 선택적으로 where(조건 추가), group by(그룹으로 분화), join(natural join), as(재명명 = 생략가능), order(정렬) 등의 명령어들을 추가로 서술하여 원하는 데이터를 조회할 수 있습니다.

또한 NULL VALUE 에 관한 내용도 배웠는데, true=1, false=0 이라면 unknow=0.5 라는 부분만 명확히 알면 null value와의 연산 결과를 유추하는데 문제가 없을 것 같습니다.


운영체제


커널 프로그래밍 과목에서는 __Task의 상태전이(State Transition)와 실행 수준 변화__ 에 대해서 공부했습니다.

하나의 Task는 여러 state값을 가질 수 있는데 이 값은 물론 task_structure 내에 존재합니다.

또한 프로세스(스레드)가 생성되면 task_structure와 함께 생성되는 thread_union 에 관해서도 공부했습니다.

가상 메모리에는 stack과 heap이 있는데, 가상 메모리에 존재하는 커널코드(1GB)내 에도 stack과 heap이 존재합니다 (운영체제가 사용).

커널코드내에 존재하는 스택에 모든 task들의 task_structure와 thread_union이 있는데,
thred_union내에도 stack이 존재합니다. (운영체제가 해당 task의 kernel mode를 다루기 위한 스레드에서 사용)

user모드에서 kernel모드로 변경될 때 hardware context switch가 발생하고, 그 때 레지스터의 값들을 thread_union내의 pt_regs 부분에 저장합니다.


좋은 웹페이지 즐겨찾기