[OS] 운영체제란 무엇일까? (정의, 종류, 역할)
·
◼ CS/운영체제
운영체제의 정의 운영체제는 일종의 프로그램입니다. 다만 메모장이나 인터넷 브라우저처럼 우리가 흔히 쓰는 응용 프로그램과는 성격이 조금 다릅니다. 운영체제는 이러한 응용 프로그램들이 잘 실행될 수 있도록 하드웨어와 소프트웨어를 관리하는 특별한 프로그램 입니다. 운영체제가 존재하기에 사용자는 컴퓨터를 쉽게 다룰 수 있으며, 만일 운영체제가 없다면 컴퓨터는 '깡통 기계'로 전략하게 된다고 볼 수 있을 만큼 운영체제는 매우 중요한 도구입니다. (참고로 '깡통 기계'는 학부 수업 시간에 교수님께서 쓰신 표현이라 여기에도 그대로 적어봤습니다.) 운영체제의 대표적인 예시로는 윈도우, 맥 OS, 리눅스, 유닉스 등이 있습니다. 커널 영역 vs 사용자 영역 컴퓨터에서 프로그램을 실행하려면 메모리에 적재되어야 합니다. 그..
[프로그래머스] 하샤드 수 (📘Lv. 1) (Python)
·
◼ PS Note/프로그래머스
문제 바로 가기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (Python) 사용 언어 : Python 풀이한 날짜 : 2022-04-07 def solution(x): answer = True sum_x = 0 str_x = str(x) for elem in str_x: sum_x += int(elem) if x % sum_x: answer = False return answer 풀이 로직 및 문제 접근 과정 결국 내가 하면 되는 것은 x % (x의 각 자리수의 합) == 0 이 참인가 거짓인가를 밝히는 것 뿐이다. (O(1) 시간 내에 충분히 ..
[백준] 7576번 : 토마토 (🥇골드 5) (Python)
·
◼ PS Note/백준
문제 바로 가기 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 풀이 사용 언어 : Python 풀이한 날짜 : 2023-02-10 from collections import deque # 입력값 처리 및 필요 변수 선언 m, n = tuple(map(int, input().split())) box = [ list(map(int, input().split())) for _ in range(n) ] visited = [ [False] * m for _ in range(n) ] days = [ [..
[백준] 15650번 : N과 M (2) (🥈실버 2) (Python)
·
◼ PS Note/백준
문제 바로 가기 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 사용 언어 : Python 풀이한 날짜 : 2022-02-10 n, m = tuple(map(int, input().split())) lst = [] def print_lst(): for elem in lst: print(elem, end=" ") print() def choose(curr_num): if curr_num == m + 1: print_lst() for i in range(1, n + 1): if len(lst) >= 1 an..
[백준] 1929번 : 소수 구하기 (🥈실버 3) (Python)
·
◼ PS Note/백준
문제 바로 가기 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 풀이 사용 언어 : Python 풀이한 날짜 : 2022-03-11 m, n = tuple(map(int, input().split())) def isPrime(a): if a == 1 : return False i = 2 while i*i
[ReactJS] 관심사의 분리와 Custom Hook
·
◼ FrontEnd/ReactJS
관심사의 분리 각각의 관심사에 따라 코드를 분리하는 기법 코드가 하나의 관심사만 신경쓰도록 분리하는 것 관심사의 분리의 특징 특정한 변화에 대응하기 위해 읽고 이해하고 수정해야 하는 코드의 단위를 줄일 수 있어 유지 보수에 용이해진다. 하나의 코드가 하나의 기능을 담담하기에 여러 역할이 혼재된 코드보다 단위별로 재사용하기 쉬워진다. 코드의 기능 테스트 또한 쉬워진다. 관심사의 분리가 잘 된 소프트웨어는 낮은 결합도와 높은 응집도란 특징이 나타난다. 낮은 결합도 (Loose Coupling) : 코드가 얽혀있지 않고 관심사에 따라 독립적으로 잘 분리되어 있다. 높은 응집도 (High Cohesive) : 동일한 목적(관심사)를 가진 코드끼리 잘 모여있다. KISS 원칙 Keep It Simple, Stup..
[Python] 변수 Scope (전역 변수와 지역 변수) 에 대한 이해
·
◼ IT Etc./Python
예시 1 _list = [1, 2, 3, 4] def sum_all(): sum_val = 0 for elem in _list: sum_val += elem return sum_val total_sum = sum_all() print(total_sum) print(sum_val) 10 NameError: name 'sum_val' is not defined 전역 변수는 굳이 인자로 넘기지 않아도 함수 내에서 잘 작동한다. 즉, 전역 변수는 어디에서나 쓸 수 있다. 지역 변수는 내부 Scope를 벗어나면 증발하여 더 이상 접근할 수 없다. 즉, 지역 변수는 어디에서나 쓸 수 없다. 예시 2 코드 1. _list = [1, 2, 3, 4] def modify(): _list[0] = 10 modify() f..
[ReactJS] Dynamic Routing & Query String
·
◼ FrontEnd/ReactJS
Dynamic Routing (동적 라우팅) 정적 Routing Routing을 설정하는 가장 기본적인 방식은 정적 Routing이다. 정적 라우팅은 Router 컴포넌트에서 미리 프로젝트에 사용할 경로들과 보여줄 컴포넌트들을 모두 정의해두는 방식이다. import React from 'react'; import { BrowserRouter, Route, Routes } from 'react-router-dom'; const Router = () => { return ( ) } export default Router; 하지만 복잡하고 규모가 큰 애플리케이션에서는 경로를 미리 설정하는 Routing 방식만으론 처리하기 힘든 작업이 존재할 수 있다. (Route를 유연하게 정의할 수 없으므로) 동적 라우팅 ..
[ReactJS] Component의 분리와 재사용 (관심사의 분리)
·
◼ FrontEnd/ReactJS
컴포넌트 분리 관심사의 분리 관심사의 분리란 복잡한 코드를 비슷한 기능을 하는 코드끼리 별도로 관리하는 것을 말한다. 프로그램을 구별된 '개개의 관심사를 해결하는 부분'으로 분리하는 디자인 원칙이다. 컴포넌트 별로 관심사를 분리하면 확장성과 재사용성을 높일 수 있다. 컴포넌트를 분리하는 이유 React에서 컴포넌트는 다양한 역할을 한다. 어떤 컴포넌트는 UI를 표현하고자 하고, 또 어떤 컴포넌트는 동작하는 로직을 담을 수 있다. 위의 두 역할을 모두 담는 컴포넌트 또한 존재하고, 하나도 담지 않는 컴포넌트도 존재할 수 있다. 이처럼 컴포넌트는 재사용할 수 있는 최소 UI 단위임에도 불구하고, 웹의 복잡도와 해당 컴포넌트에서 수행하려고 하는 역할에 따라 얼마든지 복잡해질 수 있다. 따라서 '관심사의 분리'..
[ReactJS] 상수 데이터 & Mock Data + fetch 매소드
·
◼ FrontEnd/ReactJS
상수 데이터란? 변하지 않는 데이터 React에서 데이터는 UI이다. 시간이 흐름에 따라 변하는 변수 데이터로 UI를 만들 땐 백엔드 서버에서 데이터를 받아와야 한다. 반면 변하지 않는 상수 데이터로 UI를 만들 땐 백엔드 서버에서 데이터를 받아올 필요가 없다. 상수 데이터 활용하기 /* App.js */ import React from "react"; const MENU_LIST = [ { id: 1, menuName: "New Repository" }, { id: 2, menuName: "Import Repository" }, { id: 3, menuName: "New Gist" }, { id: 4, menuName: "New Organization" }, { id: 5, menuName: "New ..