막 어려운 문제라기보다는, 생각의 전환을 잘 하고 싶어서 글을 적게 된 문제이다. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/132266?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내가 푼 풀이 처음에는 dfs + dp를 이용해서 문제를 풀려고 했었다. 이전에 갔던 길이라면, 최단거리를 다시 구할 필요가 없기 때문이다. 이렇게 하니 답은 나왔지만, 시간 초과가 떠서 맞지 못했다. 아래는 그 dfs 코드이다. 이미 최단거리를 구했던 곳이라면 더이상 가지않고 최단거..
메모리 구조에 대해서 어렴풋이만 알고 있는 것 같아 제대로 정리해보려고 합니다. 주 메모리 메모리는 크게 커널(kernal) 영역과 유저(User) 영역으로 나뉘어지고, 커널 영역에는 운영체제가 적재되고 유저 영역에는 일반 프로세스가 적재됩니다. 프로그램이 실행되기 위해서 프로그램이 주 메모리(RAM)에 load되어 프로세스가 되어야합니다. 또한, 프로그램 중에 사용할 변수와 데이터들을 메모리에 저장하여 사용합니다. 유저 영역에 적재되는 프로세스의 메모리 구조는 아래와 같습니다. 유저 영역 메모리 구조 메모리 구조는 크게 코드, 데이터, 힙, 스택 영역으로 나뉩니다. 운영체제가 실행 프로그램을 위해서 공간을 4가지로 할당해줍니다. 1) 코드(Code) 영역 실행할 프로그램의 코드가 저장되는 영역으로 텍스..
1. 특성 (ACID) 1) 원자성 (Atomicity) - 한 트랜잭션 내 모든 연산들이 완전히 수행되거나 전혀 수행되지 않아야함 (all or nothing) - DBMS의 회복 모듈 : 시스템 다운이 될 경우, 트랜잭션의 영향을 취소함으로써 원자성 보장 2) 일관성 (Consisitency) - 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면 트랜잭션이 수행된 후에 데이터베이스는 또 다른 새로운 일관된 상태를 가짐 - DBMS의 무결성 제약 조건, 동시성 제어 모듈 3) 고립성 (Isolation) - 한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에는 갱신중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야함 - 다수의 트랜잭션들이 동시에 수행되더라도 그 결과..
1. 삽입 정렬 (Insertion Sort) 설명 이미 정렬이 된 부분과 되지 않는 부분을 나누면서 정렬한다. 배열의 앞의 요소부터 차례대로 이미 정렬이 된 부분과 비교하여, 적합한 위치를 찾아 삽입하는 알고리즘이다. 두번째 요소부터 왼쪽의 요소들(이미 정렬이 된 부분)과 비교하여 삽입 위치를 찾아야한다. 이미 정렬이 된 부분과 비교연산을 할때는, 왼쪽으로 옮겨가며 비교를 하여 삽입 위치를 찾는다. 예시 1. [5, 3, 8, 1, 2, 7] → 두번째 원소인 3과 왼쪽의 이미 정렬된 배열인 [5] 와 비교 - 3과 5를 비교했을 때 5보다 작기 때문에 5를 한칸 뒤로 이동 : [3, 5] 2. [3, 5, 8, 1, 2, 7] → 세번째 원소인 8과 왼쪽의 이미 정렬된 배열인 [3, 5] 와 비교 -..
SWEA에서 모의 역량테스트 문제 풀어보다가 신기한?흥미로운? 문제를 발견해서 적어보려고한다. 또, 내가 푼 방법은 다른사람들이 주로 푼 방법과는 달라서 두가지 방법을 모두 정리해보려한다. 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRJ8EKe48DFAUo&categoryId=AWXRJ8EKe48DFAUo&categoryType=CODE&problemTitle=%EB%AA%A8%EC%9D%98&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이..
오랜만에 자료구조를 직접 구현해보는 연습을 해보고있다. 스택은 자주 사용하는 자료구조이며, 어느정도 개념도 잘 알고 있다보니 직접 구현하는 게 어렵진 않았다. 그래서 나 스스로에게 미션(?)을 부여하면서 구현해보았다. 첫번째는, 제네릭을 사용해서 구현할 것. 두번째는, 스택의 구성은 배열과 링크드리스트 두가지 버젼을 구현해볼것. 이를 구현하기 위해서 인터페이스를 사용했다. 보통 스택에서 사용하는 메소드들을 인터페이스를 통해 선언해놓고 배열 스택과 링크드리스트 스택에서 구현하도록 했다. 역시 이때 요소의 타입은 제네릭을 사용하여 지정하도록 하였다. Stack public interface Stack { boolean add(E data); E pop(); E peek(); E get(int idx); bo..
오랜만에 손코딩 연습도 해볼겸 개념정리도 한번 할겸 자바로 링크드리스트를 구현해보았다. 링크드리스트는 노드가 연속적으로 다음 포인터를 가지고 있는 자료구조이다. 링크드 리스트의 개념이나 특징을 공부한 후에 구현해보는 것을 추천한다! 처음에는 데이터 타입을 그냥 가장 상위 클래스인 Object 클래스로 구현해보았다. 그렇게 하면 여러개의 다른 데이터 타입을 넣을 수는 있겠지만, 하나의 데이터 타입으로 고정할 수가 없었다. (예를 들면 자바 라이브러리 util에 있는 자료구조들처럼..) 그래서 제네릭 타입으로 구현하여 호출하는 쪽에서 타입을 지정하고, 다른 타입을 파라미터로 넣으면, 컴파일 오류가 나게하여 더 좋은 코드를 작성해보았다. 일반적으로, 컴파일 오류가 나게끔 하는 게 더 좋은 코드이다. 런타임 오..
이 문제는 좀 문제(?)가 있는 문제라고도 할 수 있다. 시간복잡도적으로 더 효율적인 코드를 알게 되어서 그 내용을 정리해보려고한다. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 일단, 재귀 + 백트래킹으로 풀 수 있는 문제다. 그렇게 풀어도 통과할 수 있다. 나 또한 그렇게 풀었다. class Solution { int answer = 0; public int solution(int[] info, int[][] edges) ..