분류 전체보기

    CHAPTER 03.데코레이터 패턴

    데코레이터 패턴 이해를 위한 간단한 문제 제안 2022년 스타버즈 커피는 커피 브랜드를 대표하는 브랜드로 성장해있습니다. 1971년 스타버즈는 지금처럼 회사가 커질줄 몰랐고 메뉴도 지금처럼 많지 않았습니다. 사업을 시작할 무렵에는 아래와 같은 설계 구조로 이뤄져 있습니다. Beverage는 음료를 나타내는 추상클래스입니다. 매장에서 판매되는 모든 음료는 이 클래스의 서브클래스가 됩니다. Beverage의 cost()메소드는 추상 메소드입니다. 서브클레스에서는 이 메소드를 구현해야합니다. Beverage의 description이라는 인스턴스변수는 각 서브클래스에서 설정되며 커피에 대한 설명 정보가 문자열로 저장됩니다. description이라는 변수 정보는 getDescription() 메소드를 통해 정보..

    CHAPTER 02.옵저버 패턴

    옵저버 패턴 이해를 위한 간단한 문제 제안 독자에게 기상 조건인 온도, 습도, 기압 3가지의 변화를 감지하는 시스템을 만들라는 요구사항이 들어옵니다. 위의 3가지 항목들은 실시간으로 갱신되야 합니다. 디스플레이를 손쉽게 추가할 수 있어야 합니다.이 기기는 다른 추가사항 또한 바로 넣을 수 있도록 확장 가능해야 합니다. 요구 사항을 좀 더 자세히 설명해보겠습니다. 저희들이 구현해야하는 것은 WeatherData 객체입니다. 가상 스테이션은 습도, 온도, 기압 센서로부터 데이터를 받습니다. 이때 변경되는 데이터는 실시간으로 받기 때문에 WeatherData객체는 실시간으로 데이터를 변경해줘야합니다. WeatherData객체는 가상 스테이션과 통신해서 기상 데이터를 가져옵니다. WeatherData객체는 디스..

    CHAPTER 01.디자인 패턴 소개와 전략 패턴

    전략 패턴 이해를 위한 간단한 문제 제안 전략패턴을 이해하기 위해 간단한 문제를 먼저 제시해보도록 하겟습니다. “SIMUDuck”이라는 오리 게임을 만들기 위해 오리라는 객체를 정의하고 오리를 상속받아 도메인에 맞는 오리를 생성하는 설계 구조입니다. 이런 설계 상황에서 기획자의 요구에 의해 Duck이라는 객체에 Fly()라는 메소드를 추가 받아야 하는 요구사항이 들어온것입니다. 개발자는 상속을 사용하여 구현한 상태에서 모든 오리는 날수 있다고 생각하여 Fly()라는 메소드를 추가하게 됩니다. 근데 이런 상황에서 만약 모형 오리라는 클래스를 추가하게 되면 날지 못하는 오리들도 날게 되는 기이한? 오류가 발생하게 됩니다. 이처럼 전략패턴은 상속에 대한 부정적인 관점으로 인터페이스 기반 설계와 구현을 지향합니..

    CHATER 00.이 책을 읽는 방법

    이 책을 읽는 이유와 포스팅 하는 이유 이 책은 디자인 패턴에 대해 설명하는 책들입니다. 개인적으로 많은 멘토분들과 동료들이 이 책을 읽으라고 추천을 해주셨습니다. 이 카테고리의 포스팅된 글들은 제가 까먹고 기억하기 위해서 작성하는 목적도 가지고 있지만 구글링을 통해 들어와서 정보를 빠르게 필요로 하신 분들을 위해서이기도 합니다. 이 책의 저자는 에릭 프리먼과 엘리자베스 롭슨입니다. 에릭 프리먼은 월트 디즈니 온라인 CTO를 역임하고 현재는 WickedlySmart에서 책과 동영상 콘텐츠를 창작하는 일을 하는 프로입니다. 또한 헤드 퍼스트 시리즈를 만든 사람 중 한명입니다. 엘리자베스 롭슨은 소프트웨어 엔지니어 저자로서 WickedlySmart의 공동창업자로 예일대학교에서부터 기술적인 분야에 열정을 품고..

    컨테이너 기반(Docker) MySQL 서버 InteliJ 연동 오류 처리

    InteliJ IDE에서 DB 연동 중 아래와 같은 오류가 발생했다. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server 당시 나의 오류 환경 SpringBatch 테스트를 위한 DB가 필요한 상황이었다. 당시 오류 환경은 아래와 같았다. Local에서 MySQL을 설치한 상태였다. (외부 접근 Port번호 3306 사용중) 컨테이너 Server(MySQL)를 동작시킨 상황이었다.(외부 접근 Port번호 3307:3307) 사용 위의 사진처럼 Port번호를 3307로 설정해도 접근이 안되는 문제가 발생했다. 처음 연동시에는 도커의..

    Spring의 API 예외 처리

    개요 이전 글에서 오류와 예외처리에 대한 설명을 진행했다. https://hyeophyeop.tistory.com/150 이전 글은 BaseController에 대한 설명이었으며 개발자는 편하게 error 페이지를 관리할 수 있다는것이 핵심이었다. 하지만 API의 예외 처리는 다르다. HTML 페이지는 4xx, 5xx 오류 페이지만 있으면 대부분의 오류 문제를 해결할 수 있으나 API는 그렇지 않다. 왜냐하면 API는 각 서버와 연동을 하기 때문에 오류 응답 스펙이 다향하며 JSON 데이터로 응답을해줘야 하기 때문이다. 이 글에서는 복잡한 API 예외 처리를 효율적으로 처리하기 위한 ExceptionResolver에 대햇 설명하며 해당 내부기술이 어떻게 동작하는지와 사용법에 대해 설명한다. Spring의..

    1.Spring Batch 소개

    1.개요(Spring Batch는 왜 등장했는가)자바 기반의 표준 배치 기술이 존재하지 않기 때문에 등장했다.자바에는 Network, TCP, UDP, Thread 등 개발에 필요한 기본 기술들이 JSP(Java Specification Request)에 명시되어있다.하지만 배치와 관련된 기술은 JSR에 명시되어있지 않고 이것이 Spring Batch의 등장 배경이 되었다.그렇기 때문에 재사용 가능한 자바 기반 배치 아키텍쳐가 필요하게 되었다.그렇기에 Spring Batch가 등장하였다.Spring Batch는 SpringSource(현재는 Privotal)와 Accenture(경영 컨설팅기업) 두 기업의 합작품이다.Accenture-배치 아키텍쳐를 구현하면서 쌓은 기술적 경험 노하우를 보유한 회사Spr..

    Spring의 예외처리와 오류페이지

    예외 처리랑 오류 페이지를 만드는 작업을 왜 해야 하나요? 웹 사이트 이용시 비정상적인 접근을 할 경우 서버에서 오류 페이지를 반환받은 경험이 있을것이다. 위와 같은 상황에서 개발자는 사용자에게 정상적인 요청이 이루어지지 않은 이유를 알려줘야 할 필요가 있다. Spring은 이러한 오류처리를 편리하게 제공한다. 이 글에서는 Spring의 예외 처리와 오류페이지에 대해 설명하며 이러한 동작을 할 때 내부원리의 동작과정에 대해서 설명한다. 스프링의 예외처리는 어떻게 진행되나요? 스프링은 ErrorPage를 자동으로 등록한다. src/main/resources/error 경로의 HTML 파일을 오류 반환 HTML로 설정한다. 파일 이름을 오류 번호대로 해야한다. ex:)300.html, 3xx.html, 40..

    Spring의 필터와 인터셉터

    필터와 인터셉터란? 인증과 보안이 필요한 사이트에서 해당 서비스를 사용할 수 없어야한다. 스프링에서는 인터셉터와 필터를 통하여 검증로직을 작성할 수 있다. 필터는 서블릿 자체의 기술이며 스프링이 서블릿 기반의 기술이기 때문에 필터를 사용할 수 있는것이다. 인터셉터는 스프링 자체의 기술이다. 즉 스프링은 서블릿 기반의 기술이므로 검증을 할 수 있는 수단이 2가지가 있는것이다. 필터와 인터셉터의 흐름 필터와 인터셉터의 전체적인 흐름은 아래와 같다. HTTP요청 -> WAS -> Filter -> Servlet -> Intercepter -> Controller 필터는 서블릿에 도달되기전에 검증로직을 수행한다. 인터셉트는 컨트롤러에 도달하기전에 검증로직을 수행한다. 필터는 아래와 같은 인터페이스를 통해서 구현..

    Spring의 쿠키,세션

    1. 개요 이번 글에서는 고객들의 로그인 상태를 지속적으로 유지시키기 위한 방법을 다룬다. 고객들의 정보를 지속적으로 유지시키기 위해서는 쿠키의 개념이 필요하다. 쿠키의 고질적인 문제를 파악하고 이를 해결하기 위한 세션의 등장개념을 이해하도록 하고 스프링에서의 세션을 어떻게 적용하는지 확인해보자 쿠키가 생성되는 전체 흐름 서버에서 로그인에 성공하면 HTTP 응답을 통해 Server에 접속한다. 접속에 성공한 이후 현재 쿠키가 존재한다면 해당 쿠키를 반환하고 없을 경우 Server에서 생성해서 보내준다. 클라이언트가 쿠키를 가지고 있다면 Server에서는 별도의 login 로직을 거치지 않기 때문에 속도, 성능 측면에서 이점을 가져갈 수 있다. 이런 쿠키에는 2가지의 종류가 있다. 영속 쿠키: 만료 날짜를..

    Spring의 Bean Validation

    1.Bean Validation 소개 이전 Validation에 대한 글을 작성할 때 검증 로직이 굉장히 복잡한것을 알 수 있다. https://hyeophyeop.tistory.com/145 Spring의 Validation이란 Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. C.. hyeophyeop.tistory.com 이런 복잡한 로직을 Spring에서는 Bean Validation을 통해 간단하게 검증을 할 수 있다. 아래의 복잡한 이전 코드와 S..

    Spring 메시지, 국제화

    Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. Contribute to NamHyeop/Spring_Boot_Study development by creating an account on GitHub. github.com 1.메시지 국제화 소개 메시지는 아래와 같이 Message.propertis에 내용을 관리하면서 수정에 용이하게 만드는것을 의미한다. //messages_kr.properties item=상품 item.id=상품 ID item.itemN..

    Spring의 Validation이란

    Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. Contribute to NamHyeop/Spring_Boot_Study development by creating an account on GitHub. github.com 1.검증이 필요한 이유 사용자가 잘못된 입력값을 넣었을 경우 정상적인 요청인지 검증을 해야한다. 만약 검증을 안할 경우 아래와 같은 상황이 발생할 수 있다. 만약 이름 입력란에 공백을 넣고 입력했는데 이름이 입력되지 않았습니다가 출력이 ..

    Spring MVC 구조 및 구현

    개요 얼마전에 네이버에서 기술 면접을 보게 되었는데 질문으로 MVC 패턴에 대해서 설명해달라는 질문을 받게 되었다. 설명은 했으나 너무 오래전에 학습해서 내가 알고있는 전부를 제대로 전달하지는 못한거 같아서 글로 다시 정리해볼려고 한다. 1.스프링 MVC 전체 구조 스프링의 MVC 구조는 간단하게(?) 아래와 같은 구조로 이루어져있다. 먼저 Http 요청이 이루어진다 이후 DispatcherServelet의 doDispatch()가 실행된다. 현재 스프링 부트의 핸들러 매핑 정보를 탐색한다. handler 동작을 수행해줄 Adapter의 정보를 보고 handler 동작을 수행할 수 있는 Adapter가 존재한다면 반환하게 된다. 다시 DispatcherServlet으로 돌아온뒤 3번에서 받아온 Contr..

    7562번-나이트의 이동

    문제 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 접근방법 1) 접근 사고 1. 나이트의 이동 좌표에 대한 설정값을 구해줍니다. 2. bfs 탐색을 통해 나이트의 이동에 대한 탐색을 시작합니다. 3. 이때 1초당 걸리는 탐색의 경우의 수는 탐색을 진행할 때 queue의 크기와 같으므로 탐색을 시작할 때 큐의 크기만큼 탐색을 진행하고 시간을 1증가 시켜줍니다. 2) 시간 복잡도 O(V+E) 3) 실수 4) 배운점 5) PS 다른 문제풀이를 보니..

    11725번-트리의 부모 찾기

    문제 https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 접근방법 1) 접근 사고 깊이 우선 탐색에서 가장 깊은 탐색을 진행한 뒤 재귀가 끝난 경우를 노드의 현재 번호값에 저장하면 되는 문제였습니다. 2) 시간 복잡도 3) 실수 4) 배운점 5) PS 정답 코드 #include using namespace std; int n; const int MAX = 100005; vector edge[MAX]; bool visited[MAX]; int ret[MAX]; void DFS(int cur) { visited[c..

    2606번-양

    문제 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 접근방법 1) 접근 사고 1. DFS 탐색을 통해 1번 바이러스와 연결된 간선들을 탐색해주면 됩니다. 2. 바이러스의 숙주인 1번은 제외하고 출력해야 합니다. 2) 시간 복잡도 3) 실수 4) 배운점 5) PS 정답 코드 #include using namespace std; int n, m, ans; const int MAX = 105; vector board[MAX]; bool visited[M..

    3184번-양

    문제 https://www.acmicpc.net/problem/3184 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net 접근방법 1) 접근 사고 1. 울타리가 아닌 영역을 탐색한다. 2. 울타리가 아닌 영역의 양과 늑대수를 측정한다. 3. 양이 늑대수보다 클 경우에는 양의 결과를 반환하는 변수에 양의 수를 더해주고 아닌 경우에는 늑대의 결과를 반환하는 변수에 늑대의 수를 더해준다. 2) 시간 복잡도 O(v + e) 3) 실수 4) 배운점 5) PS 정답 코드 #include using namesp..

    4963번-섬의 개수

    문제 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 접근방법 1) 접근 사고 1. 섬을 8가지 방향으로 탐색을 합니다. 2. 탐색을 하면서 방문한 섬은 visited배열을 사용해서 방문 체크를 진행해줍니다. 3. 시도한 BFS 횟수가 섬의 개수를 의미하는것을 알 수 있습니다. 2) 시간 복잡도 O(V + E) 3) 실수 r과 c의 위치가 바껴서 나온다. 문제 설명이 너무 불친절한거 아닌가.. 예제를 다시 보고 입력 부분이 잘못되었다는것을..

    11724번-연결 요소의 개수

    문제 https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 접근방법 1) 접근 사고 1.연결 요소의 개수를 구해주면 되기 때문에 방문한 노드 지점을 visited 배열을 사용해 체크해줍니다. 2. 방문한 지역은 visited를 사용해 제외해주었기 때문에 DFS 시도횟수의 의미가 전체 연결 개수의 의미를 의미하므로 DFS 시도 횟수를 출력해줍니다. 2) 시간 복잡도 O(V + E) 3) 실..

    1012번-유기농배추

    문제 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 접근방법 1) 접근 사고 문제를 읽고 해석해보면 배추가 있는 구역인 1부분을 탐색하면 해결되는 문제였습니다. 2) 시간 복잡도 O(V + E) 3) 실수 fill을 사용할 때 열만 +1하면 되는데 행까지 +1을 해서 outofmemory오류가 발생하였다. 4) 배운점 5) PS 정답코드 #include using namespace std; int t, r, c, ea; const int MAX = 50;..

    스프링 빈 기능

    스프링 컨테이너와 스프링 빈 1.스프링 컨테이너 생성 목표 Spring의 @Bean 기능을 사용하여 스프링 컨테이너에 등록하는 연습을 해보자 Spring의 ac.getBean(), ac.getBeanDefinitionNames(), ac.getBeanDefinitionName() 기능을 사용해보자 Configuration을 사용해 Contatiner에 Bean을 저장하는 방법을 수행해보자 //AppConfig.class import bluish_Community_Projcet.bluish.discount.DiscountPolicy; import bluish_Community_Projcet.bluish.discount.RateDiscountPolicy; import bluish_Community_Projc..

    Spring의 종류와 장점

    1.스프링이란? 스프링의 종류 스프링 프레임워크(지원 기술 대상을 알아보자) 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 : 캐시, 이메일, 원격 접근, 스케쥴링 테스트 : 스프링 기반 테스트를 지원한다 언어 : 코틀린, 그루비 스프링 부트란? 스프링을 편리하게 사용할 수 있도록 지원한다. 단독으로 실행할 수 있는 스프링 애플리케이션을 생성한다. Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치할 필요가 없다. 손쉬운 빌드 구성을 위한 starter를 제공한다. 스프링과 외부 라이브러리를 자동으로 구성해준다. Spring과 타 라이브러리의 버전을 전부..

    level2_방금그곡

    문제 https://programmers.co.kr/learn/courses/30/lessons/17683 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 접근방법 1) 접근 사고 1.모든 정보들을 사용하기 쉽게 struct 구조를 사용하여 songinfo 라는 자료형을 사용해 전처리 작업을 진행한다. 2.주어진 곡 정보에 내가 사용해야 하는 음악 코드(m)이 존재하는지 확인한다. 3.만약 음악 코드를 포함하고 있으면 후보자 배열에 담아둔다. 2) 시간 복잡도 O(N^2) 3) 실수 진짜 너무 많..

    python mediapipe 설치 오류 해결 방법(media pipe install ERROR: Could not find a version that satisfies the requirement mediapipe (from versions: none))

    오류정보 media pipe install ERROR: Could not find a version that satisfies the requirement mediapipe (from versions: none) media pipe install ERROR: Could not find a version that satisfies the requirement mediapipe (from versions: none) 사용환경 Mac M1 Pro 급하신 분들을 위한 해결방법 1.python 버전을 3.7번대로 다운 받는다. 2.intel 기반의 python을 사용한다. 해결과정 처음에는 구글링을 했지만 답이 나오지 않았습니다. "pip install mediapipe" does not work · Issue ..

    No Properties 오류

    JSON을 사용하여 API를 개발하던 중 아래와 같은 오류를 만났다. 보통 DTO 파일에 Getter, Setter가 추가가 안되어 있어서 발생하는 오류다. DTO 파일 또는 getter나 setter가 사용되는 코드에 추가가 되어있는지 확인해야한다. ps.다음부터는 no properties가 보이면 바로 lombok(@Getter or @Data)을 추가해서 오류를 해결하면 좋을거 같다.

    NoClassDeFoundError 해결 방법

    NoClassDeFoundError JPA 환경설정 중에 NoClassDeFoundError가 발생하였다. Maven 환경 기반에서 설정 중이었다. 11월 29, 2021 2:19:15 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...] 11월 29, 2021 2:19:16 오후 org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.3.10.Final} 11월 29, 2021 2:19:16 오후 org.hibernate.cfg.Enviro..

    실무 JUnit Test에서 ConcurrentHashMap을 사용해야 하는 이유

    ConcurrentHash Map vs HashMap 개발을 하다 보면 DB에 값을 저장하기 전에 메모리 영역에서 값을 저장하고 테스트해야 할 때 가 있다 이때 아래와 같이 간단 한 맴버를 저장하는 MemoryRepository가 있다고 가정해보자 안에는 맴버의 아이디 값과 멤버를 저장하는 HashMap 구조를 사용했다. import java.util.HashMap; import java.util.Map; public class MemoryMemberRepository implements MemberRepository{ private static Map store = new HashMap(); @Override public void save(Member member) { store.put(member.g..

    level2_삼각달팽이

    문제 https://programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 접근방법 1) 접근 사고 인덱스값을 조절해주면 해결하면 됩니다. 탐색시 방문한 곳을 또 방문해주면 반복문을 탈출하게 설정해주었습니다. 2) 시간 복잡도 O(n^2) 3) 실수 4) 배운점 5) PS 정답 코드 #include using namespace std; const int MAX = 1001; int board[MAX][MAX]; bool visited[M..

    level1_두 개 뽑아서 더하기

    문제 https://programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 접근방법 1) 접근 사고 인덱스가 안겹치게 모든 경우를 더 해준뒤 같은 값들의 중복을 unique를 사용해서 지워주었습니다. 2) 시간 복잡도 O(n^2) 3) 실수 없었습니다. 4) 배운점 5) PS 정답 코드 #include using namespace std; vector solution(vector n..