일단 씻고 나가자
23.04.03 본문
2023. 04. 03 월요일
- [Java] 문자열을 특정 index에 StringBuilder로 넣는 방법?
: sb.insert(index, “”);
특정 문자열의 끝에 insert 하고 싶다면 index에 str.length()를 넣어주면 됨. (== append())
- 게임판에서 좌상에서 우하로 가는 경우의 모든 수를 세는 아이디어?
: 파스칼의 삼각형을 대입하자. 파스칼의 삼각형을 비스듬히 누워 사각형으로 만들면, 해당 칸의 숫자가 해당 칸까지 갈 수 있는 경로의 경우의 수가 된다.
- [DB] 특정 애트리뷰트가 특정 두 값의 ‘사잇값’ 혹은 사이 ‘날짜’를 갖는 컬럼을 뽑는 문법?
: WHERE 컬럼 명 BETWEEN 숫자1 BETWEEN 숫자2; (AND로 이후 조건도 나열 가능.)
WHERE 컬럼 명 BETWEEN TO_DATE(문자열, ‘YYYY-MM-DD’) AND TO_DATE(문자열, ‘YYYY-MM-DD’);
TO_DATE는 첫 매개변수에 담긴 문자열을 두 번째 매개변수의 형태로 날짜 포맷으로 변환해준다.
- [DB] 특정 애트리뷰트가 어떤 값들 중 하나인 조건을 표시하는 문법?
: WHERE 컬럼 명 IN (‘A’, ‘B’ ..);
- [DB] A 컬럼 기준으로 오름차순, B 컬럼 기준으로 내림차순 방법?
: ORDER BY A ASC, B DESC;
- [Java] 정수 두 개를 바이너리 연산 (or, and, xor, not) 방법? 이진수로 해당 결과 표현?
: a | & ^ ! b
단 해당 결과를 정수로 출력하면 10진수로 나온다. (연산은 string이 아닌 10진수로 해야 함)
따라서 Integer.toBinaryString(a | & ^ ! b) 해주어야 이진수로 나옴.
- [Java] map에 대하여 Entry를 이용하여 향상된 for문을 도는 방법? keySet()과 차이?
: for(Map.Entry<Generic, Generic> entry : map.entrySet());
for(Generic g : map.keySet()) { map.get(g); }의 경우
Entry는 현재 차례의 entry를 바로 가져오는 반면,
get에서는 매 수행마다 hashcode(), equals()를 통해 value를 찾기 때문에 비효율적이다.
- [AWS] 클라우드 컴퓨팅이란? 유사한 단어?
: 서버 너머 남의 컴퓨터(구름, 클라우드)를 원격 제어를 통해 사용하는 것.
유사어로 호스팅이 있다. 호스트는 인터넷에 연결된 각 컴퓨터를 말하고, 이러한 컴퓨터를 빌려줘서 서버로 사용할 수 있도록 하는 것이 호스팅이다.
- [AWS] EC2란? 이러한 서비스를 왜 사용?
: Elastic Computing Cloud. (elastic : 탄력적인) 컴퓨터를 빌려주는 사업이다.
직접 호스트를 구현하지 않더라도 시간 대비 저렴한 가격으로 빌릴 수 있다.
또한 서버 쪽 소프트웨어를 대신 설치해주고 설치, 운영, 백업, 보안 등을 알아서 해줌. (DB)
- [Git] 특정 log의 파일을 삭제했을 때 파일이 가는 곳? 복구 방법?
: git reset —hard 123 같이 123 로그의 파일을 삭제했을 경우
git은 내부적으로 현재 branch의 헤더가 가리키고 있는 /.git/ORIG_HEAD라는 곳에 기록해둔 후 위험한 명령을 실행한다.
복구 방법은 git reset —hard ORIG_HEAD로 되돌릴 수 있다.
- [Git] 특정 log로 체크아웃 하는 방법? 해당 용어?
: git checkout 123 하게 되면 123의 로그를 직접 head 가리킨다.
이를 detached 되어 있는 상태라고 한다.
- [Java] Thread 구현 및 주요 함수?
: java.lang에서 Thread 클래스를 상속받는 방법, 혹은 Runnable 인터페이스를 구현하는 방법이 있다.
새롭게 만든 Thread의 기능은 run() 함수를 override 받아서 내부에서 구현하며, (이때 run은 다른 흐름의 main 메서드와 유사하게 생각하면 된다.)
실제 실행은 Thread t = new Thread(); t.start();처럼 strat 함수를 호출해야 한다.
이 start 함수는 Thread가 실행할 준비가 되었다면 run()을 호출한다.
Thread의 내장 함수로는 Thread.sleep(millis) 가 있으며, try-catch가 필요하다.
(1000 milli = 1 s)
- Level-triggered D-type flip flop을 무엇이라 부르는가? 주요 기능?
: latch. 해당 회로는 write, 혹은 클럭으로 볼 수도 있었지만, 일반적으로 latch는 data를 out시켜서 write하는 용도로 사용한다. 하나만 내보낼 수 있기 때문에 1bit만 저장시킨다.
저장된 파일을 특정 주소로만 접근하여 읽고 쓸 수 있는 가장 기본 단위? 둘이 합치면?
: selector (읽기)
앞서 얘기한 latch는 1bit만을 저장할 수 있으며, 그것을 8bit로 묶은 것이 8bit latch.
3개의 스위치를 이용하여, 2^3인 8까지 경우로 해당 8bit latch에서 원하는 위치의 값을 가져올 수 있는 것이 8-to-1 selector이다.
decoder (쓰기)
마찬가지로 8개의 공간이 있을 때 어느 공간에 쓸 것인지 3개의 스위치로 지정하는 것이 3-to-8 decoder이다. 하나의 데이터 신호가 들어와도, 해당 디코더를 통해 원하는 위치에만 write가 가능하다.
이렇게 8비트 단위로 읽고, 쓰는 셀렉터와 디코더가 합쳐지고 특정 연산 없이 저장된 곳에서만 데이터를 불러올 수 있다. 이렇게 3개의 스위치로 저장된 위치를 알아내는 것을 주소라고 하며, 이런 온전한 8 bit latch 회로를 바로 RAM이라고 한다.
- 그래프의 용어?
- 그래프의 종류와 각각의 특징, 표현 방법?
무방향 그래프 // (A, B) = (B, A)
방향 그래프 // <A, B> != <B, A>
가충치 그래프 // 간선에 값(이동 비용)이 있음.
완전 그래프 // 모든 정점이 서로 연결.
- DFS, BFS란 무엇이며, 각각의 구현 방법?
1. DFS (Depth First Search) - 깊이 우선 탐색.
스택과 boolean 배열(방문 배열)을 준비.
최초 시작 노드를 stack에 넣고, 넣은 노드는 배열에서 true 체크.
stack에서 해당 노드를 pop (출력)하고, 해당 노드와 인접한 배열을 stack에 넣고 true 표시.
이어서 인접한 배열 중 가장 윗단에 있는 노드를 pop, 다시 인접한 노드를 넣고 true.
이를 모든 인접한 노드가 stack에 들어갈 수 없을 때까지 반복한다.
2. BFD (Breath First Search) - 너비 우선 탐색.
DFS와 비슷하게, 큐와 boolean 배열(방문 배열)을 준비.
마찬가지로 인접 정점을 Queue에 넣고, 배열을 true로 바꾸고, 빼면서 인접 정점을 넣는다.
- 그래프의 구현 방법?
인접 행렬 (Adjacency Matrix) // 2차원 배열 이용. 탐색과 업데이트가 빠르지만 메모리.
-> 노드 개수가 적고, 간선의 수가 많을 때 유리. (밀집 그래프. 완전 그래프.)
인접 리스트 (Adjacency List) // 연결리스트 이용. 탐색이 느리지만 메모리, 추가/삭제.
-> 노드 개수가 많고, (노드 추가에 유리) 간선의 수가 적을 때 유리. (희소 그래프.)