본문 바로가기

전체 글

(172)
JAVA - 숏서킷 연산 short curcit?? 자바 공부하다가 이런게 있었나 싶어서 포스팅합니다. 숏서킷 연산은 논리연산자에서 알아볼 수 있습니다. 코딩을 하다보면 if( a || b) , if( a && b) 와 같은 논리연산자를 사용하게 됩니다. 먼저 a || b 부터 보겠습니다. or 연산으로 a 또는 b가 트루라면 조건문을 실행하게 됩니다. 즉 그렇다는 것은 a와 b 둘 중 하나만 true여도 된다는 것이고 a만 true라면 이미 조건문을 실행할 수 있게 되는 조건이 충족된 것이죠. 그렇기 때문에 자바에서는 숏서킷연산에 의해서 true || b라면 b의 연산을 실행하지 않습니다. 그렇다면 &&은? a와 b 모두가 true여야 합니다. 그렇다면 false && b라면? b가 true, false 무엇이든 이미 조건을 ..
Hash Tale! 해시 테이블(hash table), 해시 맵(hash map), 해시 표는 컴퓨팅에서 키를 값에 매핑할 수 있는 구조인, 연관 배열 추가에 사용되는 자료 구조이다. 해시 테이블은 해시 함수를 사용하여 색인(index)을 버킷(bucket)이나 슬롯(slot)의 배열로 계산한다. 해시 함수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 이름을 0~15 사이의 정수값으로 매핑하는 해시 함수의 예. “John Smith”와 “Sandra Dee”라는 두 키 사이에 충돌이 존재한다. 해시 함수(hash function)는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다. 그 ..
프로그래머스 - 주식가격 프로그래머스 주식가격 문제입니다. 분류는 스택/큐로 되어있는데 저는 스택이나 큐를 사용해서 풀진 않았습니다. 이 문제를 풀기전까지는 노트로 정리하지 않고 시작했는데 항상 어려움을 겪었습니다. 이번부터는 먼저 노트에 코드를 어떻게 작성할지 정리하고 코드를 구현했는데 훨씬 깔끔하고 쉬웠던 것 같습니다. 물론 문제 자체가 쉬웠던 영향도 있겠지만요. 앞으로는 노트를 무조건 이용해야겠습니다. ㅎㅎ class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; int temp; for(int i=0; i
백준 1260번 - DFS와 BFS DFS와 BFS 문제를 한번 풀어보았습니다. 바이러스 문제를 풀고 이 문제를 푸니까 사실 DFS는 동일한 문제라고 생각들 정도로 금방 구현을 완료했습니다. 그러나 BFS는 DFS와 다르게 재귀로 구현하는 것이 아닌 큐를 활용해서 구현해야 합니다. (DFS도 STACK으로 구현 가능) 두 문제 모두 그래프를 인접 행렬로 만들어서 풀었는데 다른 블로그 자료를 찾아보니 그래프 간선이 적게 존재하면 연결 리스트로 구현하는 것이 공간 복잡도상 더 좋다고 합니다. 다음 글에는 한번 그래프 인접 행렬과 인접 리스트 구현에 대해서도 작성해보겠습니다. import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Mai..
백준 2606번 -바이러스 (DFS) DFS를 집중적으로 공부하기 위해서 기초문제부터 풀려고 하고 있습니다. 문제를 읽어보니 그래프를 먼저 생성하는 것이 필요하다고 생각해서 인접행렬과 인접리스트로 구현하는 방법 중 인접행렬로 그래프를 만들었습니다. 그래프를 구현할 때 중요한 것이 map의 크기인데요 배열의 index는 0부터 생성되나 그래프의 index는 1부터 사용하는 것이 더 편리하므로 +1을 해주는 것이 포인트입니다. 또한 dfs의 개념상 방문한 장소를 구별해야하므로 visited라는 배열을 생성해 체크해주었습니다. 인접행렬로 그래프를 생성후에는 1번과 연결된 컴퓨터의 숫자만 count하면 되기 때문에 dfs를 활용했습니다. dfs의 재귀개념을 제대로 이해하지 못했는데 끝까지 찾다가 다 찾은 경우 다시 원래의 자리로 돌아간다라는 생각을..
프로그래머스 - 전화번호 목록 프로그래머스 전화번호 목록 문제입니다. startsWith라는 매서드때문에 쉽게 풀수 있었습니다. startsWith라는 매서드는 문자열을 앞에서부터 비교하면서 같은 문자열이 존재하면 true를 반환하고 그렇지 않을 경우 false를 반환합니다. class Solution { public boolean solution(String[] phone_book) { boolean answer = true; boolean result = false; int len = phone_book.length; String temp = ""; for(int i=0; i
Java class, Interface 차이 가장 큰 차이는 생성자가 없다. 메모리를 덜 잡아먹는다.~ 추상 클래스와 인터페이스의 차이 추상 클래스는 상속 받아서 기능을 이용, 확장시키는것이 목적 반면 인터페이스는 매서드의 구현을 강제하기 위함(구현 객체의 같은 동작을 보장) 또한, 자바는 다중 상속을 지원하지 않습니다. extends a, b (x) 그러나 인터페이스는 여러개를 사용 가능 implements a, b(o) 이러한 이유 때문에 다중상속을 위해 만들어진 것이라고 생각하실 수 있지만 그러한 이유로 만들어진 것은 아니며 추상 클래스는 상위 클래스를 상속 받는다는 것, 인터페이스는 같은 동작을 보장하는 목적이라는 것을 알고 계시면 될 것 같습니다.
JAVA <-> JDBC PreparedStatement, Statement, CallableStatment 차이점! PreparedStatement 저는 개발할 때 가장 많이 썼습니다! 동적인 쿼리를 날릴 떄 사용합니다. Statement 정적인 쿼리를 날릴 때 사용합니다. 근데 생각해보시면 JAVA에서 미리 변수를 통해 동적인 쿼리를 Statment로 보낼 수 있게 만들 수도 있습니다. 위에 두개는 무슨차이가 있을까요? DBMS에 SQL의 명령어를 실행하게 되면 DBMS는 SQL구문을 해석하고 실행계획을 작성한 후에 SQL문이 실행됩니다. 그렇기 때문에 실행계획을 캐싱해서 사용한다면 재사용성을 높일 수 있습니다! PreparedStatment는 이러한 재사용성을 보장하지만 Statement는 재사용 하지 못하기 때문에 PreparedStatment를 사용하는것이 좋습니다. 물론 한번의 쿼리만 사용하는 것이 명확하다면..