본문 바로가기

전체 글29

[JAVA] 블록 이동하기 (kakao 2020) 최대한 깔끔하게 풀어보려는 욕심 때문인지 시간이 오래걸렸다. 이 문제를 풀면서 자바에 더 익숙해지고 있는 느낌이 든다. 알고리즘은 bfs 이지만 회전하는 부분의 구현이 복잡하다. 어렵진 않지만 작은 하나의 실수라도 굉장히 고민하게 할 수 있다. 만약 이 문제를 풀때 테스트케이스 1번에서 틀렸고 문제를 풀때 "방향" 이라는 설정을 잡았다면 방향에서 오류가 났을 가능성이 크다. 필자가 그러하였다. 예를 들어 데이터를 다음과 같이 잡았다고 하는 경우를 든다. (1,0,0) 의 의미는 좌표(1,0) 에서 방향이 0(수평) 본인은 방향을 잡고 풀었는데 테스트케이스 1번을 도저히 통과가 안되어 좌표 2개를 잡고 로봇의 움직임을 설정하였다. 모든 로직이 같지만 통과한 것을 보면 분명 방향 관련 로직을 잘못 설정했을 .. 2020. 7. 29.
[Spring] 초간단 웹 어플리케이션 구현 **입문 글에서 너무 두서없이 일단 시작해보고 본거 같아서 본 글에서 확실하게 공부한 내용을 정리하고자 한다. 완성된 화면을 보고싶으시면 맨 아래로 가시면 됩니다 1. 요구사항 정리 공부도 할겸 매우 매우 심플한 예제를 들고 배운것을 응용해 보았다. 아래의 이미지는 고객의 비즈니스 요구사항이라고 가정했다. DB는 뭘쓸지 모르기때문에 인터페이스로도 구현한다. 테스트를 위한 데이터베이스로서 h2 데이터베이스를 사용하였다. 2. application.properties & build.gradle 위는 데이터베이스와의 연결 정보를 담고 있는 설정파일이다. 나중에 datasource를 jpa 의 entity manager가 일을 할때 자동으로 설정하는 거 같다. url 은 로컬 ~ 디렉토리에 product.mv... 2020. 7. 28.
[Spring] spring boot 입문하기 spring 이라는 거대한 아이템에 접근하기 위해서 강의를 찾던중 인프런의 김영한님 강의를 듣게 되었다. 스프링부트 입문 강의는 모든 자료와 영상이 무료로 풀려있고 입문 영상으로는 최고라고 생각한다. 아직 안들었다면 꼭 들어보길 추천한다. 강의 들은 내용을 바탕으로 처음 부터 끝까지 혼자 직접 코딩하고 정리해보고 앞으로 어떤 부분을 깊게 공부해야할 지 정해야겠다. 개인적으로 jpa를 깊게 해볼까 생각중이다. 일단 뭘 알기 전에 프로젝트부터 생성해보고 시작하자. 1) 프로젝트 생성하고 살펴보기 설정은 위와 같이 자바11버전과 spring boot 버전 2.3.2 와 빌드 방식은 Gradle Project로 설정한다. 템플릿 엔진은 여러개 있는데 강의에서 타임리프 썼기 때문에 본인도 타임리프를 선택한다. D.. 2020. 7. 27.
[JAVA/PYTHON] 자물쇠와 열쇠(kakao 2020) 파이썬이 역시 간결하긴하다. 그래도 자바공부중이니 자바로 열심히 풀어봤다. 문제를 접근하는 방법에 대해 고민을 많이 했다. 완전탐색으로 해도 될까했는데 대충 계산해본 결과 20*20 자물쇠와 20*20 키를 가지고 있다고 해도 시간초과는 나지 않을거 같았다. 그래서 완전탐색으로 풀기로 한다. 풀기위해서 메소드를 나누는데, 1) 키를 90도씩 돌리는 함수를 작성하기로 한다. 이는 rotate라는 이름으로 작성하였다. 2) 자물쇠 배열을 상하좌우 및 대각선까지 자물쇠 크기만큼 span한 새로운 자물쇠 배열을 초기화한다. 이를 spanLock이라는 이름으로 작성하였다. 3) 키와 자물쇠를 합쳤을 때 참인지 거짓인지 판별하는 check함수를 작성하였다. 4) span 되어있는 자물쇠에 키가 올수있는 모든 경우의.. 2020. 7. 26.
[JAVA] 문자열 압축 (kakao 2020) String 관련 문제를 해결하기 위해서는 Stringbuilder 를 쓰면 편하다는 글을 보고 시도해보았다. 내가 문제를 풀기 위해 공부했던 String 관련 도구들은 다음과 같다. 1) String 의 길이를 알기 위해서는 length() 메소드를 사용하면 된다. 2) String + String 보다는 Stringbuilder를 통해 append 하면 연산이 빠르다. 3) substring(시작위치,끝위치) 메소드를 이용해 문자열을 자른다. split 보다 권장되는 사항이라고 한다. 위 3가지를 이용해 쉽게 풀었다. 알고리즘은 다음과 같다. 1) i = 1, answer = s의 길이; 2) ( i < 문자열 길이의 반) 이라면 3번으로 간다. 아니라면 10)번으로 간다. 3) cnt =1 로 초기.. 2020. 7. 25.
[JAVA] 주식가격 - 프로그래머스lv2 파이썬으로 매일 풀다가 자바로 처음 도전했던 문제다. 처음 문제를 이해하지 못해서 한참 고민했지만 풀이방법은 매우 간단하다. [ 1, 2, 3, 2, 3 ] 배열이 주어졌을 때, 아래와 같은 과정을 거친다. (단, n=배열의 길이, i=0~n-1 ) 1) 해당 i 번째 인덱스의 값을 price 라는 변수에 저장한다. 그리고 cnt 라는 변수를 0 으로 초기화한다. 2) j= (i+1 ~ n-1 ) 이라고 하자. 루프를 돈다. 2-1) cnt 의 값을 증가시킨다. 2-2) 만약에 price 의 값보다 j가 더 작으면 루프를 탈출한다. 3) answer[i] 에 cnt 값을 저장한다. 아래는 소스코드 2020. 7. 25.
[데이터베이스] transaction manager, storage manager, query manager transaction manager - 트랜젝션이란? 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미 트랜잭션 매니저는 동시다발적인 트랜잭션을 관리 할 수 있어야 한다. transaction manager 의 필수 기능 ACID Atomicity (원자성) - 트랜잭션의 실행이 완전하게 일어나던지 아니면 시작조차 하지 않던지 둘중에 하나만 하라. Consistency (일관성) - 트랜잭션이 성공적으로 완료 되면 일관적인 DB의 상태를 유지하는 것을 말한다. 데이터형이 정수형에서 string으로 변한다거나 하면 안된다. Isolation(격리성) - 트랜잭션 수행시 다른 트랜잭션은 끼어들 수 없다. durability.. 2020. 6. 11.
[데이터베이스] 기본키와 외래키 그리고 제약조건의 설계 기본키 - primary key - 데이터를 구분하는 가장 근본이 되는 값 - not null & unique 외래키 학번 이름 수강과목 b6xxxx 김길동 1 b7xxxx 조길동 2 b5xxxx 박길동 3 수강과목id 과목이름 1 자료구조 2 프로그래밍 언어 외래키는 위 처럼 다른 테이블의 '기본키'를 참조할때 외래키라고 한다. 박길동은 3번 과목이 없지만 3번 수강과목을 들었다고 되어있는 데 이런 현상을 dangling 이라고 한다. 이는 참조 무결성을 위반한 것이다. 제약조건의 설계 -개체 무결성(entity integrity) 기본키는 null 을 가질수 없다. - 참조 무결성 (referential integrity) 외래키는 참조하는 테이블에 존재하여야 한다. - 도메인 무결성 (domain .. 2020. 6. 11.
intro DBMS 기말고사 대비겸 데이터베이스 공부한 것을 정리해보고자 한다. 어디까지 정리할지는 모르겠지만 앞으로 데이터베이스 지식에 도움이 될거 같아서 정리해 두기로 한다. 본 장에서는 간단하게 개념위주로 설명한다. DBMS 란? - 데이터 베이스를 관리하는데 필요한 기능을 제공하는 소프트웨어 DBMS 필수 기능 4가지 사용자가 데이터베이스를 디자인 할 수 있어야한다. 모든 사용자가 데이터 베이스를 조작할 수 있어야 한다. 대량의 데이터를 안전하게 보관할 수 있어야 한다. 많은 사람이 동시에 데이터를 볼 수 있어야 한다. 데이터 딕셔너리 란? 데이터 베이스 자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블 테이블을 생성 및 변경할 때, 서버에서 자동으로 갱신된다. 사용자가 직접 수정 및 삭제할 수 .. 2020. 6. 11.