반응형 분류 전체보기313 [Java] Java에 포인터가 없는 이유 - 포인터(Pointer) vs 참조(Reference) C나 C++ 에는 포인터라는 개념이 존재하지만 Java에는 포인터라는 개념을 사용하지 않는다. 비슷한 개념으로 참조라는 것을 사용한다. 그렇다면 왜 Java에는 포인터가 존재하지 않을까? 그전에 포인터(Pointer)와 참조(Reference)의 차이를 간단하게 알고 넘어가자. 포인터, 참조 모두 주소를 통해 원본 데이터에 접근하는 공통 기능을 가진다. 다만, 포인터는 메모리를 직접 핸들링할 수 있지만 참조는 메모리를 직접 핸들링할 수 없다는 차이점이 존재한다. 포인터는 주소 값을 임의의 메모리 주소로 변경할 수 있다. 만약 개발자가 실수로 주소 값을 변경해버리면 segment fault 같은 문제가 발생할 가능성이 생기게 된다. 하지만 참조는 직접 메모리에 접근이 불가능하기 때문에 주소 값을 임의의 메.. 2021. 8. 20. 백준 11003 : 최솟값 찾기 https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net [ 문제풀이 ] 처음에는 세그먼트 트리를 사용하였는데 TLE가 발생하였다. 이 문제는 덱(Deque) 자료구조를 활용하면 해결할 수 있는 문제이다. 1부터 N까지 순차적으로 탐색하면서 덱을 항상 L개 이하의 크기를 유지하면서 제일 첫 번째 원소는 범위에서 가장 작은 값을 가지도록 구현해주면 된다. import java.io.BufferedReader; import .. 2021. 8. 20. SSR(서버 사이드 렌더링) vs CSR(클라이언트 사이드 렌더링) 렌더링(Rendering)이란 컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일(scene file)로부터 영상을 만들어내는 과정을 말한다. 따라서 웹 상에서의 렌더링은 서버로부터 받은 정보(HTML)를 브라우저 화면에 표현하는 것을 의미한다. 브라우저 화면을 의미하는 페이지는 정적 페이지와 동적 페이지가 존재한다. 정적 페이지는 누구에게나 동일한 화면을 보여주지만 동적 페이지는 사용자에 따라 다른 페이지를 보여줘야 한다. 간단한 예시로 로그인을 성공하면 해당 유저의 로그인 정보가 페이지에 나타나야 할 것이다. 따라서 사용자의 요청에 해당하는 페이지를 보여주기 위해 서버로부터 필요한 데이터들을 받아서 최종 HTML를 구성해야 한다. 이때 서버 or 클라이언트 중 누가 최종 HTML를 .. 2021. 8. 19. [Spring] 조회한 빈(Bean)이 모두 필요할때 처리하는 방법 이전 글에서 하나의 객체에 빈을 주입해야 하는데 조회한 빈(Bean)이 2개 이상일 경우 @Autowired 필드 명 매칭, @Qualifier, @Primary 3가지 방법을 통해 해결한다고 공부하였다. 그렇다면 조회한 빈이 모두 필요하다면 어떻게 해야 할까? 이는 Map이나 List 같은 자료구조를 활용하여 해결할 수 있다. 우선 테스트하기 쉽도록 두 종류의 Repository를 빈으로 등록해주는 AutoConfig 클래스를 하나 구현하자. @Configuration public class AutoConfig { @Bean public MyRepository jpaRepository() { return new JpaRepository(); } @Bean public MyRepository memory.. 2021. 8. 19. 백준 1956 : 운동 https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net [ 문제풀이 ] 모든 정점에서 모든 정점으로의 최소 경로를 구할 수 있는 플로이드 와샬 알고리즘을 사용하면 쉽게 해결할 수 있다. dist[i][i]의 값이 INF가 아니라는 것은 자신에게 돌아올 수 있다는 것이기 때문에 i번 정점에서 출발하여 i번 정점으로 돌아오는 사이클 경로가 있다는 것을 의미한다. import java.io.BufferedReader; im.. 2021. 8. 19. [Spring] 조회 빈(Bean)이 2개 이상일때 처리하는 방법 스프링 컨테이너에 빈을 등록하면 스프링 컨테이너가 알아서 의존관계를 맺어준다. 그런데 의존관계를 맺어줄 때 해당하는 타입의 빈이 2개 이상이라면 어떤 문제가 발생할까? 간단한 예시로 알아보도록 하자. 현재 MyRepository 인터페이스가 하나 있으며, 이를 구현하는 2개의 Repository가 있다. public interface MyRepository { } @Repository public class MemoryRepository implements MyRepository{ } @Repository public class JpaRepository implements MyRepository{ } 스프링 컨테이너에서 관리되는 컴포넌트에서 빈으로 등록된 MyRepository를 사용한다고 하자. @Au.. 2021. 8. 18. 백준 1248 : 맞춰봐 https://www.acmicpc.net/problem/1248 1248번: 맞춰봐 규현이는 멍청하다. 왜냐하면, 1~10까지 수 밖에 모르기 때문이다. 어느 날 규현이 옆을 지나가던 태석이가 규현이를 보고 이렇게 외쳤다. "빵빵!!" 규현이는 "아하!" 하면서 세상에는 빵이란 수도 www.acmicpc.net [ 문제풀이 ] 백트래킹 기반의 완전 탐색으로 해결할 수 있는 문제이다. 처음에는 중복 숫자가 허용되지 않는다는 조건이 없어서 21^10의 경우의 수가 존재하니 완전 탐색으로 불가능하다고 생각하였다. 그런데 아무리 고민해봐도 완전 탐색이 아니고서는 해결할 수 없을 것 같아서 가능성 없는 경우들을 걸러내어 최대한 경우의 수를 줄여나가도록 구현하니깐 통과하였다. import java.io.Buffe.. 2021. 8. 18. Forward와 Redirect 방식의 차이점 & PRG(Post/Redirect/Get) 현재 작업 중인 페이지에서 어떤 요청으로 인해 다른 페이지로 이동할 경우 Forward 방식과 Redirect 방식, 2가지 방식으로 페이지를 전환해준다. 두 방식의 공통점은 자신에게 요청이 왔을 때 자신이 처리할 수 없기 때문에 다른 URL에게 요청 처리를 위임한다는 점이다. 하지만 요청 처리를 위임하는 과정에서 차이점이 발생한다. 그렇다면 이 두 방식의 차이점은 무엇일까? 하나씩 알아보도록 하자. 1. Forward 방식 Forward 방식은 URL 1에게 요청을 보내게 되면 해당 요청을 자신이 처리할 수 없기 때문에 다른 URL 2에게 직접 위임하여 처리하도록 하는 방식 서버 내부에서 처리하기 때문에 초기의 Request, Response 정보를 유지한 채로 전송된다. 또한, 서버 내부에서 일어나는.. 2021. 8. 17. 백준 2515 : 전시장 https://www.acmicpc.net/problem/2515 2515번: 전시장 첫째 줄에는 그림의 개수 N (1 ≤ N ≤ 300,000)과 판매가능 그림을 정의하는 1이상의 정수 S가 빈칸을 사이에 두고 주어진다. 다음 이어지는 N개의 줄 각각에는 한 그림의 높이와 가격을 나타내는 정 www.acmicpc.net [ 문제풀이 ] 최적화 문제는 그리디, DP, 파라메트릭 서치 중 하나라고 생각하기 때문에 이 문제 역시 이들을 기반으로 접근하였다. 먼저 그리디이다. 그리디는 매 순간의 선택이 최적해라는 것이 보장되어야 하는데 이는 성립하지 않는다는 것을 반례를 통해 쉽게 찾을 수 있다. 다음으로 파라메트릭 서치이다. 구하고자 하는 금액을 이분 탐색을 시도하면서 진행해야 하는데 현재 key값인 금액이.. 2021. 8. 17. 이전 1 2 3 4 5 6 7 8 ··· 35 다음 반응형