분류 전체보기 140

[OS] 교착상태 (Dead Lock)

교착상태(Dead Lock)란, : 여러 프로세스가 서로의 작업이 끝나기만을 기다리며 작업을 진행하지 못하게 되는 상태 ex) 식사하는 철학자 문제 : 왼쪽->오른쪽 순으로 포크를 집어야 식사를 시작할 수 있다는 조건이 있을 때, 5명의 철학자는 각자 왼쪽의 포크를 집은 뒤 오른쪽 포크를 무한정 기다리게 되어 굶어 죽을것이다. =>교착상태 교착상태 필요조건 : 4가지를 모두 충족할 때 교착상태가 발생한다. o 상호배제 : A가 사용중인 자원을 B가 동시에 사용할 수 없다. o 비선점 : A가 사용중인 자원을 B가 뺏을 수 없다. o 점유와 대기 : 자원1을 사용(점유)하면서 자원2를 필요(대기)로 하는 상황이다. o 원형대기 : 점유와 대기상태의 프로세스들의 요청이 원형을 이룬다. 교착상태 해결방법 o ..

CS/OS 2021.08.30

[OS] 임계구역 접근방법 - 뮤텍스(Mutex)와 세마포어(Semaphore)

임계구역 (Critical Section) : 여러 프로세스가 특정 공유자원을 병행하며 읽고 쓰면 "경쟁조건이 발생했다" 라고 말한다. 이 때, 프로그램의 결과는 자원에 접근한 프로세스의 순서에 따라서 달라지는데, 이러한 영역을 임계구역이라고 한다. ex) 생산자-소비자 문제 - Producer는 물건을 생산하는 input method 를 호출한 뒤 sum을 하나 증가시킨다. - Consumer는 물건을 소비하는 output method를 호출한 뒤 sum을 하나 감소시킨다. 이 때, 둘 다 sum = 3인 상태에서 동시에 전역 변수 sum에 접근하여 (1) Producer는 sum = 4, (2) Consumer는 sum = 2로 업데이트 하려고 하면 (1)->(2) or (2)->(1) 어떤 순서로 ..

CS/OS 2021.08.30

[Python][프로그래머스] 64065_튜플

2019 카카오 개발자 겨울 인턴십 https://programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1] programmers.co.kr 더보기 문제 설명 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다. (a1, a2, a3, ..., an) 튜플은 다음과 같..

[Python][프로그래머스] 17676_[1차] 추석 트래픽

2018 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/17676 각 로그 작업의 start시간, end시간을 배열에 저장하고, 각각의 end시간부터 1초를 구간으로 탐색한다. 그러면 이 구간에 속하는 다른 처리되고 있는 작업은 start가 이 구간의 종료보다 빠르고, end가 이 구간의 종료보다 늦어야 한다. --> 이 조건을 만족하면 cnt를 증가 # time[0] 진행중 작업을 확인하려는 구간의 시작점. # --> 즉 구간은 time[0]에서 time[0] + 0.999 까지 # 모든 작업을 순회하면서 구간에 포함되는지 확인 # time2[0] 확인 작업의 종료시간, time2[1] 확인 작업의 시작시간 if t..

[Python][프로그래머스] 42888_오픈채팅방

2019 KAKAO BLIND RECRUITMENT https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 더보기 문제 설명 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했..

[Python][프로그래머스] 12979_기지국 설치

Summer/Winter Coding(~2018) https://programmers.co.kr/learn/courses/30/lessons/12979 코딩테스트 연습 - 기지국 설치 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5 programmers.co.kr 더보기 더보기 문제 설명 N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5g 기지국은 4g 기지국보다 전달 범위가 좁아, 4g 기지국을 5g ..

SQL Mapper와 ORM 차이

프로그램을 실행하는 동안 그 안에서는 많은 데이터들이 사용되고, 만들어진다. 우리는 이 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 것이 필요한데, 이 개념이 바로 영속성(Persistence)이다. 이는 Layered Architecture에서 다음과 같이 도메인 모델과 데이터베이스 사이에 존재하며, 프로그램의 객체정보를 DB에 저장하고, DB의 정보를 객체로 담아와 사용할 수 있도록 한다. 자바에서는 데이터의 영속성(Persistence)를 위한 JDBC를 지원해주는데, 그림에서 보이는 프로세스와 같이 JDBC에서 DB에 접근하여 SQL을 수행하고, 결과값을 다시 dataType으로 매핑시켜주는 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다. SQL Mapper와 ORM은..

Programming/JPA 2021.08.22

[Python][백준] 1963_소수 경로

https://www.acmicpc.net/problem/1963 1963번: 소수 경로 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금 www.acmicpc.net 더보기 문제 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금은 1033으로 해놨는데... 다음 소수를 무엇으로 할지 고민중이야" “그럼 8179로 해” “흠... 생각 좀 해볼게. 이 게임은 좀 이상해서 비밀번호를 한 번에 한 자리 밖에 못 바꾼단 말이야. 예를 들어 내..

JPA로 CRUD 구현하기_(4)비즈니스 로직 수행

** 이전게시글 참고: 2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(3)CRUD 구현 1. Service 구현 DB와 통신하며 데이터를 주고받는 CRUD 기능 구현이 끝났다. 이제 기능을 비즈니스 로직을 수행하는 MemberService 클래스를 구현해보자. [service/MemberService.java] package service; import repository.MemberRepository; import vo.Member; public class MemberService { private MemberRepository memberRepo; public MemberService(MemberRepository memberRepo) { this.member..

Programming/JPA 2021.08.20

JPA로 CRUD 구현하기_(3)CRUD 구현

** 이전게시글 참고: 2021.08.20 - [Programming/JPA] - JPA로 CRUD 구현하기_(2)객체와 테이블 매핑 1. CRUD 구현하기 실습에서는 JPA를 이용한 CRUD를 구현하지만, Mybatis나 다른 DB 접근방법으로 변경되어도 프로젝트의 상위계층(service)에는 영향이 없도록 하기 위해서 MemberRepository 인터페이스를 상속하는 JPA 구현 클래스를 생성한다. [repository/MemberRepository.java] package repository; import vo.Member; public interface MemberRepository { public void save(Member newMember); public Member findById(St..

Programming/JPA 2021.08.20