본문 바로가기

분류 전체보기93

(JAVA) Java DFS 구현 Java dfs ArrayList n : 정점의 수m : 간선의 수 0 - 1 - 2라고 가정하면입력을0112로 해야한다.a[0] 1a[1] 0 2a[2] 1 public static void main(String[] args) { int n = 5; int m = 4; Scanner sc = new Scanner(System.in); ArrayList[] a = (ArrayList[]) new ArrayList[n]; for (int i = 0; i < n; i++) { a[i] = new ArrayList(); } for (int i = 0; i < m; i++) { int v1 = sc.nextInt(); int v2 = sc.nextInt(); a[v1].add(v2); a[v2].add(v1); } Boolean[] visite.. 2019. 3. 16.
(Java Greedy) 문자열안에 포함된 가장 긴 팰린드롬(palindrome)문자열 (Java / 거꾸로해도 같은 문자열 / 팰린드롬(palindrome) )문제거꾸로해도 같은 문자열을 팰린드롬(palindrome) 이라고 한단다.문자열이 주어지면 그안에 포함된 가장 긴 팰린드롬 문자열의 길이가 몇인지 구하는 알고리즘 ex) "dkwqabcdcbawp" 면 7을 반환 / "abba" 면 4를 반환 풀이를 보지않고 풀어서 정확한지는 모르겠지만 내가 푼 방식은 1. input(주어진 문자열)을 거꾸로 뒤집은 문자열을 만든다. (reverse) String input = "xxxabbbaoowla" -> String reverse = "alwooabbbaxxx" 2. input과 reverse에 같은 내용을 포함하는 가장 긴부분을 찾는다.String input = "xxxabbbaoowla".. 2019. 3. 15.
(JAVA) JAVA Stack을 활용하여 infix-postfix 변환 및 계산 //1. 수식에서 첫번째 항목을 빼냅니다.//2. 수식의 빼낸 항목이 피연산자라면 그대로 출력측으로 빼냅니다//3. 수식의 빼낸 항목이 연산자라면 스택의 최상위 원소와 비교합니다.//4. 빼낸 연산자의 우선순위가 스택의 최상위에 있는 원소보다 높으면 그대로 스택에 넣습니다.//5. 그렇지 않다면 스택의 최상위 원소를 출력측으로 뺴내고 빼낸 연산자를 스택에 넣습니다.//6. 단, 여는 괄호'('가 나오면 닫는괄호')'가 나올 때까지 스택에 남아있게 되며, 닫는괄호')'가 나타나면 그때까지 여는괄호'('보다 상위에 있는 모든 연산자를 출력측으로 빼냅니다. 정말 열심히 찾다가 어디선가 푸는 방식을 주석으로 코드에 넣은건데 출처를 잊었네요.. 이 방법대로 구현하면 infix -> postfix 변환이 잘됩니다... 2019. 3. 15.
실시간으로 순위를 매겨 목록을 제공해야하는 페이지의 속도개선 실시간으로 인기상품의 순위를 매겨 목록으로 제공하는 페이지의 속도가 매우 느린 이슈가 있다. 그이유는 아마 페이지 로딩 때 마다 서버에서 장문의 쿼리로 계산하여 테이블을 조인해서 목록을 가져오기 때문이라고 판단하였다. 따라서 순위를 매기는 로직을 일정 시간마다 실행하고 아이템을 순위대로 저장한 테이블을 따로 하나 만들어 그 테이블에 순위와 아이템의 정보를 저장한다. 그 후 인기상품목록 페이지의 요청이 올 때에는 전에 만든 테이블에서 SELECT 만으로목록을 가져오게하여 속도를 개선하려고 한다. 2019. 3. 14.
(뒤로가기 데이터유지)상품목록페이지 유지 및 속도 개선 먼저 요청받았던 부분은 상품목록에서 상세보기로 이동한 후뒤로가기를 하였을 때 기존 목록(검색조건 및 보고있던 상품목록 부분 등)이 유지되지 않고 새 페이지가 로딩 되어 기존정보가 유지되도록 해달라는 것이었다. 이 문제를 해결하기 위해 3가지 방법을 고려 하였고Session Storage를 사용하여 문제를 해결하였다. 1. javascript history-back cache 사용- 가장 이상적인 방법이라고 생각하였으나 브라우저 별, OS별로 버그가 있고원하는 대로 페이지가 보이지 않을 확률이 높다는 정보가 있어 보류하였다. 2. (Vue.js) component keep-alive 사용- 현재 페이지는 Vue를 사용하고 있기 때문에 목록 부분을 component로 만들고 그부분만 keep-alive라는 .. 2019. 3. 13.
고객목록(약3만)을 관리페이지에서 확인하는데에 너무오랜 시간이걸리는 이슈 현재 Spring + jsp + mybatis 로 되어있고 데이터를 ajax요청으로 받아오는 것이 아닌View 페이지 랜더링 시 모든 데이터를 받아오는 jstl을 사용하기 때문에 먼저 ajax요청을 하여받아오도록 변경하였다. 변경 전에는 목록페이지로 이동할때 흰화면이 매우오래 지속되었다면, 변경 후에는 페이지는 일단 랜더링 되고목록로딩 중에는 로딩중인 화면을 띄우고 목록을 불러오는데 속도는 변경 전 후가 큰 차이는 없었다. 그리고 페이징이나 필터링을 할 때에도 무조건 서버에서 다시 데이터를 받아 페이지를 새로 만드는 구조로 되어있어 (ajax 미사용)속도개선방법이 없을까 고민하다가 DataTable이라는 js 라이브러리를 사용하기로 했다.하지만 일단 View쪽에 데이터를 모두 받아와야 필터링과 페이징이 .. 2019. 3. 7.
(Mybatis/JPA) Mybatis VS JPA 장단점은 무엇일까? 먼저 이 라이브러리들이 나온 이유는 기존 JDBC만의 사용으로 쿼리문을 만들어 요청하는 과정에서쿼리문 생성시 String을 붙히고 자르는 등의 작업이 필요해서 쿼리문이 조금만 길어져도 매우 번거롭고 관리도 힘들었다.따라서 아래의 라이브러리를 사용하여 이런 문제를 해결할 수 있다. 하지만 두 라이브러리는 해결하는 방식이 조금 다른데 그 차이와 장단점이 무엇인지 살펴보자! Mybatis1. 쿼리문을 xml로 분리 가능2. 복잡한 쿼리문 작성 가능 mybatis 장점: 복잡한 쿼리, 다이나믹 쿼리 이점데이터 캐싱기능으로 성능을 향상 시킬 수 있다. mybatis 단점: 비슷한 쿼리 남발. 객체와 쿼리문 모두 관리해주어야 함.자주쓰는 CRUD 메소드를 직접 다 작성해주어야한다. JPACURD 메소드를 기본적으로.. 2019. 2. 27.
면접대비 용어정리 OOP : 객체 지향 프로그래밍(Object-Oriented Programming) 특성 : 추상화 캡슐화 상속 다형성 (추캡상다) 추상화 - 다른 객체들과 구분되는 핵심적인 특징들에만 집중함으로써, 복잡도를 관리할 수 있도록 한다. 상속 - 재사용으로 인해 코드가 줄어든다. 하위 클래스에서 속성이나 오퍼레이션을 다시 정의하지 않고 상속받아서 사용함으로써 코드가 줄어든다. 그리고 좀 더 범용성있게 사용할 수 있다. 다형성 - 상속을통해 기능을 확장하거나 변경하는 것을 가능하게하고, 같은 클래스내에 코드길이를 줄인다. ORM : 관계형 테이터베이스 테이블과 객체 사이의 mapping 처리를 해주는 것을 ORM(Object relational Mapping)이라고 함. 출처 : https://jojoldu... 2019. 2. 11.
(딥러닝) 나는 Java가 주언어인데, 파이썬? 텐서플로우? 항상 딥러닝에 대해 관심은 어느정도 가지고 있었지만, 활용해서 개발할 기회는 없었다. 그래서 이번에는 꼭 딥러닝을 사용하는 회사에서 근무해보고싶은 생각이 크다! 하지만 내 주언어는 Java인데 딥러닝하면 모두 텐서플로우를 언급하고, 텐서플로우를 하려면 파이썬을 알아야한단다. 왜 파이썬, 텐서플로우? 처음에 텐서플로우를 하려면 파이썬을 알아야 한다길래 텐서플로우가 파이썬으로 이루어져 있는 줄 알았다.* 파이썬 vs 자바 관련 댓글 하지만 자바보다 더 느린 언어인 파이썬으로 딥러닝 알고리즘을 구동한다는 것은 이해가 되지 않았었다.알아보니 텐서플로우는 고성능의 C / C++ 로 구동되고 파이썬은 이 텐서플로우를 호출하는데에 사용하는 것이었다.그렇다면 자바로 텐서플로우를 호출하면 안되는 것인가? 자바/스프링으로.. 2019. 2. 11.