Computer Science 15

알고리즘 문제 풀이 #2 올바른 괄호

programers에서 문제 풀이한 내용입니다. 문제 설명괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어,"()()" 또는 "(())()" 는 올바른 괄호입니다.")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.제한사항문자열 s의 길이 : 100,000 이하의 자연수문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.입출력 결과sanswer"()()"true"(())()"true")()("false"(()("fa..

알고리즘 문제 풀이 #1 최대값과 최솟값

programers에서 문제 풀이한 내용입니다. 문제 설명문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.제한 조건s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.입출력 결과sanswer"1 2 3 4""1 4""-1 -2 -3 -4""-4 -1""-1 -1""-1 -1"문제 풀이 1public String getMinMaxString_1(String str) { Stri..

해시함수와 암호화 비교하기(feat. 솔팅과 키스트레칭)

해시함수와 암호화 비교해시(Hash)와 암호화(Encryption)의 가장 큰 차이는 '방향'이다. 해시 : 단방향 암호화이므로 복호화는 불가능하다. 데이터 보안에 중점을 둠.암호화 : 양방향 암호화이므로 복호화 가능하다. 통신에서 보안에 중점을 둠.암호화의 목적은 반드시 복호화하는 것은 아니기 때문에, 각자 관점에 따라 둘 다 암호화라고 부르기도 한다. 예를 들어 암호화 해시 함수(cryptographic hash function)라는 개념이 있듯이 말이다. 그래서 해시를 암호화가 아니라고 할 필요는 없는 것 같다(?)암호화개인키 (Symmetric key)다른 말로 대칭키, 비공개키, 비밀키라고 부른다. 암호화와 복호화할 때 같은 비밀키를 공유한다. 따라서 키가 유출되면 해킹 당할 수도 있다. 하나의..

프로세스(Process)와 스레드(Thread)의 차이

프로그램 (Program) 우리가 흔히 말하는 프로그램이란 명령어들의 집합이다. 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어를 말한다. 프로세스 (Process) 프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 실행 중인 프로그램이다. 프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 이때, 각각의 프로세스는 서로 메모리 공간을 독자적으로 갖기 때문에 서로 메모리 공간을 공유하지 못한다. 따라서 다른 프로세스의 메모리에 접근하려면 IPC(InterProcess Communication)과 같은 방식이 필요하다. 멀티프로세싱 : 여러 프로세스를 사용하는 것 멀티태스킹 : 같은 시간에 여러 프로그램을 띄우는 ..

시스템 소프트웨어(System software)의 종류

소프트웨어는 크게 2가지로 분류할 수 있다. 시스템 소프트웨어(System software) 응용 소프트웨어(Application software) 시스템 소프트웨어 시스템 소프트웨어는 하드웨어를 컨트롤할 수 있는 소프트웨어를 말한다. 대표적인 예로 운영체제(OS)가 있다. 예를 들어, 곰플레이어로 영상을 보고 싶다고 가정해 보자.곰플레이어는 모니터에게 "영상을 출력해" 라고 말할 권한이 없어서 운영체제로 요청해야 한다. 곰플레이어가 운영체제에게 "모니터에 영상을 출력해주면 안 될까?" 요청하면 운영체제는 받아들인다. 그제야 하드웨어는 운영체제의 명령을 받아 모니터에 영상을 출력한다. 이렇게 하드웨어를 컨트롤할 수 있는 소프트웨어가 시스템 소프트웨어다. 장치를 움직이게 하는 소프트웨어인 셈이다. 단순하게..

자료구조(Data Structure)와 추상자료형(ADT)

자료구조와 알고리즘 컴퓨터가 기본적으로 하는 일은 아래와 같다. 데이터 저장 데이터 연산 이 기준으로 자료구조와 알고리즘을 정의 내릴 수 있다. 자료구조는 데이터를 저장할 때, 어떻게 하면 컴퓨터가 처리하기 쉽게 만드는지를 다루는 것이다. 알고리즘은 데이터를 연산할 때, 어떻게 하면 컴퓨터가 처리하기 쉽게 만드는지를 다루는 것이다. 다시 말해 자료구조(Data Structure)는 자료를 저장하는 방법이고, 알고리즘(Algorithm)은 문제를 효율적으로 해결하기 위한 방법이라고 할 수 있다. 모든 상황에 좋은 자료구조는 존재하지 않으므로, 상황에 따라 효율적인 자료구조를 선택하고 알고리즘을 구현해야 한다. 또한 알고리즘을 적용하지 않아도 문제를 해결할 수 있지만, 문제의 크기가 커진다면 성능을 위해 반..

[Mybatis] 오라클 DB insert 이후 idx 값 가져오기 (nextVal, currVal)

오라클 DB에서 데이터 insert할 때 시퀀스로 idx를 생성하곤 한다. 만약 insert한 idx값을 바로 가져와야 할 경우 selectKey를 사용하면 된다. 예시를 들어보자. 아래 같이 테이블, 시퀀스가 만들어졌다고 가정한다. -- 테이블 생성 CREATE TABLE board ( board_id NUMBER NOT NULL, title VARCHAR2(50), wirter VARCHAR2(50) ) -- 시퀀스 생성 CREATE SEQUENCE sq_board_id START WITH 1 INCREMENT BY 1 MANVALUE 1 MAXVALUE 999999999 CYCLE CACHE 50; xml 쿼리에서 insert 태그 안에 selectKey 옵션을 사용해서 생성한 idx값을 바로 리턴..

Computer Science/DB 2023.11.22

H2-console에서 Localhost에서 연결을 거부했습니다. 오류 발생시 해결법

문제 발생 h2-console로 접속하니 아래처럼 'localhost에서 연결을 거부했습니다'로 콘솔 접속이 거부된다. 해결 방법 1 만약 스프링 시큐리티(Spring security)를 적용했다면 h2-console 경로에서도 접근 가능하도록 설정을 해줘야 한다. antMatchers 메서드에 "/h2-console/**"을 추가해준다. @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/h2-console/**)") .permitAll; } 해결 방법 2 그래도 동작하지 않는다면 X-Frame-Options 기능을 꺼본다. 스프링 시큐리티에서는 기본적..

Computer Science/DB 2023.11.20

H2 console 접속 오류 해결법 : Database "C:/Users/사용자명/test" not found, either pre-creat

문제 발생서버를 실행시키고 http://localhost:8080/h2-console 를 입력하여 H2 콘솔 접속시 다음과 같은 에러가 발생한다. 데이터베이스 "C:/Users/사용자명/test"를 찾을 수 없다고 나온다. 말그대로 C:\Users\사용자명 폴더에 test 파일이 없어서 생긴 문제이므로 직접 만들어주자.Database "C:/Users/사용자명/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-214] 90149/90149 (Help)해결 방법C:\Users\사용자명 경로에 빈 텍스트 파일을 생성하고 파일명을 확장자 포함하여 ..

Computer Science/DB 2023.10.14

한눈에 파악하는 SQL 로드맵

한눈에 파악하기 좋은 SQL 로드맵을 봐서 블로그에 공유한다. DBA만큼은 아니더라도, 제대로 이해하면서 쿼리를 짜는 것이 중요하다고 생각한다. 전문가 레벨까지 도달하려면 꾸준한 쿼리 연습과 깊은 이해도가 필요할 것 같다. 1. 초급 레벨: 🌱 기본 SQL 구문에 대해 알아본다: SELECT, FROM, WHERE. 데이터 타입과 NULL 값을 이해한다. 샘플 데이터셋에서 간단한 쿼리를 연습한다. 2. 중간 레벨: 📊 JOIN을 깊이 알아본다: INNER, LEFT, RIGHT, FULL. GROUP BY와 Aggregate 함수를 마스터한다. 하위 쿼리와 데이터 조작을 탐색한다. 3. 고급 레벨: 📈 고급 분석을 위한 window 기능을 파악한다. 인덱스 및 쿼리 최적화에 대해 배운다. 여러 JOIN으..

Computer Science/DB 2023.09.13