목록전체 글 (47)
Mintaka's log
거지같은 코로나... 코로나에 걸렸다.... 7일 필수 격리에서 올해 6월부터는 5일 격리 권고로 바뀌었다더니, 코로나 걸리자마자 죄다 연차로 까먹어야만 했다. 내 연차! ㅠㅜㅜㅜ 내 쥐꼬리만하고 작고 소중한 연차가 사라졌다. 여름휴가도 안가고 나중에 고이 모아 쓰려고 기다리고 있었는데ㅜㅜㅜㅜㅜ 대강의 코로나 후기는 이렇다. 양성판정 (-2일) 목이 조금 따끔거림. 조금 어지러운 것도 같은데.... 착각인 것 같기도. 그런데 주말에 왔다간 친척이 코로나 걸렸다는 소식을 들었다! 양성판정(-1일) 그냥 이상하다고만 생각했다. 무거운 짐을 들어야만 했고, 불편한 자세로 오랫동안 앉아있어야만 했기 때문에 그래서 몸이 굳은거라고 생각했다. 조금씩 이상함을 느낀건 오후부터. 앉아있는데 관절이 아팠다. 나는 다소 ..
...찾아보니 무차별 공격이라고도 나오는데, 그것 말고. 알고리즘에서 쓰이는 브루트 포스에 관함. 브루트 포스란? Brute force. 발생하는 모든 경우를 무식하게 탐색한다는 뜻. 즉, 가능한 모든 경우의 수를 탐색하기 때문에 정답만을 출력한다고 한다. 종류에는 1. 선형 구조를 전체적으로 탐색 : 순차탐색 2. 비선형 구조를 전체적으로 탐색 : 깊이 우선 탐색(DFS, Depth First Search), 너비 우선 탐색(BFS, Breadth First Search), 백트래킹 장단점 간단하다. 모든 경우를 전부 탐색하므로 장점 정확한 정답을 얻을 수 있음 알고리즘을 설계하고 구현하기 쉬움. 단점 메모리 비효율적 시간이 오래 걸림 예시 비선형 구조에 대한 예시는 각각 dfs, bfs, 백트래킹 글..
유클리드 호제법이란 두 수의 최대공약수(Greatest Common Divisor, GCD)를 구하는 알고리즘. 이 때 호제법이란, 두 수가 서로 상대방를 나눠서 원하는 수를 얻는 알고리즘을 의미한다. 즉, 큰 수의 경우 일반적으로 알고있는 소인수분해를 하기 번거로운데 이 때 사용할 수 있는 방법이라고 볼 수 있겠다. 위키백과에 설명은 이렇게 되어 있다. 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라고 하면 (단, a.>b) a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라 b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다. 대강 설명해보자면 a라는 자연수를 b..
말은 많이 들었다. Rest API, Restful API... 취직공고에도 쓰여져 있고, 몇가지 문제를 해결하려고 검색하다 조금만 타고 들어가면 흔히 볼 수 있다. 그런데도 모르겠다! 몇 번 찾아보다가 아, 그런건가 싶어 넘어가면 다음에 또 잊어버리고, 프로젝트 하다가 여기에 rest api를 사용할 수 있나 싶으면 이미 사용하고 계시잖아요? 라는 말을 듣고(...) 그래서 결국은 정리하기로 했다. 시작! (주의사항 : 공부하는 입장이니 틀린 정보가 있을 수 있습니다....) 1. API? 그럼 가장 먼저 아주 자주 쓰이는 API라는 게 뭔지부터 알아보자. API = Application Programming Interface 위키백과에 따르면, 응용 프로그램에서 사용할 수 있도록 운영 체제나 프로그래..
피보나치라는 것만 알면 간단! 그런데 피보나치라는 걸 몰라서 헤맸다..... s(n) 을 2xn 크기의 직사각형을 채우는 방법의 수라고 정의하면, s(n-1)의 형태에다가 오른쪽에 1x2 타일을 붙이는 경우가 포함되는 걸 알 수 있다. 따라서 s(n) = s(n-1) + ? 이 때 ?의 형태들을 잘 보면, 2x1 타일이 두개 붙은 것이 가장 오른쪽에 들어가있다. 즉, s(n-1)에서 1x2 타일이 항상 가장 오른쪽을 차지하고 있었다면 나머지 경우의 수들은 2x1 타일이 항상 가장 오른쪽을 차지하고 있다. 즉, ? = s(n-2). 따라서 s(n) = s(n-1) + s(n-2) 어차피 n이 되기 전 모든 값들을 계산해야 할테니 memoization을 해도 생략할만한 계산이 없다. 따라서 tabulatio..
아무리해도 어떤 식으로 풀어야 할 지 모르겠다가, (dp 기초문제라는데ㅠㅜㅠㅜㅠㅜㅠㅜ) 일단 모든 경우를 다 따져보는 코드를 먼저 작성해보라는 것과, 상태를 정한 다음 풀이하라는 걸 보고 다음식으로 짜보았다. >>어떻게 풀지 참고한 블로그 https://zzonglove.tistory.com/13 동적계획법 (Dynamic Programming) 는 어떻게 풀까? 이 포스팅은 Nitish Kumar 의 기사를 참고하여 만들었습니다. [출처] 동적계획법 (Dynamic Programming), DP 는 다항(Polynomial)한 시간안에 특정 문제를 풀기위한 기술입니다. DP 를 이용한 솔루션은 지수형태 zzonglove.tistory.com import java.io.BufferedReader; imp..
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String a; while( (a = br.readLine()) != ""){ StringTokenizer st = new StringTokenizer(a); sb.append(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())).append("\n"); } 위와 같이 ""랑 비교했을 때는 NullPointerException. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String a; while( (a = br.re..
입력 System.in.read //이렇게 쓰거나 byte[] numArray = {0, 0, 0} System.in.read(numArray); //이렇게 쓰거나 int a = System.in.read(); 1byte 씩 읽어서 아스키 코드 10진수로 나타냄. -> 한글 인식 당연히 안됨. 엔터, 스페이스도 저장됨. 알고리즘 할 때는 system.in.read 하나로 crlf를 받더니 eclipse에서 할 때는 cr과 lf가 따로 출력되었음. 예외처리 해주어야 함. 따라서 해당 메소드 안에 배열을 넣는다면 byte[] 밖에 안됨. in은 InputStream의 변수라고 함. InputstreamReader InputSteamReader ir = new InputStreamReader(System.in..
JSON이란? JavaScript Object Notation 경량화 되어 있는 하나의 데이터 교환 형식 서로 다른 언어들간에 데이터를 주고받을 수 있도록 보다 편리하게 만들어진 텍스트 기반의 형식이라고는 한다… 그냥 데이터 표기 방법임. 즉, 경량의 데이터 교환 포맷 간단한 포맷 ( 읽고 쓰기가 쉬움, xml보다 가볍고 빠름.) 텍스트 포맷 ( 언어에 독립적으로 프로그래밍 됨) key : value 형식이 기본! { "key1" : "value1", "key2" : "value2", "key3" : "value3" } 하지만 이 value 안에는 string, number, array, object, null, boolean(true, false)가 올 수 있어서 복잡해 질 수도 있다. 이렇게. { "..
jquery에서 이런식으로 하면 json 변수를 만들고 원하는 값을 출력 할 수 있다. console.log("json 시험 중"); var person = {name : "abc", gender : "male"}; console.log(person); console.log(person.name); 즉, json타입으로 값을 받아오면 jquery에서 원하는 값 조정이 가능함. 그러니까 컨트롤러에서 json 타입 만들어 가져오면 되겠지. 그럼 먼저. 1. ajax에서 받아올 데이터타입을 지정해주어야 함! $.ajax({ type : 'GET', url : '/HospitalMainDatePlus', data : {hiddendate : value}, dataType : 'json', success : fu..