반응형

전체 글 126

[프로그래머스/Java] 사칙연산(DP 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 동적계획법(DP) 파트에 해당하는 '사칙연산' 문제를 자바로 풀어보았다.https://school.programmers.co.kr/learn/courses/30/lessons/1843 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 DP 문제이기 때문에 이를 어떻게 활용할지에 대해서 가장 고민한 것 같다. 고민 끝에 결정한 방법은 l을 괄호를 여는 쪽, r을 괄호를 닫는 쪽으로 두고, dp[l][r]에 그 괄호 속 결과를 저장하는 것이었다. 처음에는 dp 배열로 2차원 배열을 하나만 사용했다. 최댓값을 찾는 문제이기에 모든 파트의 최댓값을 기록했던 것이..

[프로그래머스/Java] N으로 표현(DP 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 동적계획법(DP) 파트 문제인 N으로 표현을 자바로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42895# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   처음에 점화식을 찾는 데에 상당히 오랜 시간이 걸렸다. 그것만 찾고 나면 코드 자체는 어렵지 않게 쓸 수 있다. 대체로 DP 문제들이 점화식 찾는 게 어렵고 그 뒤는 크게 어렵지 않게 해결 가능한 것 같다. 이 문제의 기본적인 해결 방법은 동적 배열의 i번째 인덱스에, N을 i번 사용하여 만들 수 있는 숫자들의 set을 저장하는 것이다. ..

[Backend/Redis] Redis 야무지게 사용하기

해당 포스트 내용은 아래 강의 내용을 정리/요약한 내용입니다.https://www.youtube.com/watch?v=92NizoBL4uA  1. Redis 캐시로 사용하기1.1. 캐시(Cache)란? 사용자의 입장에서 데이터의 원래 소스보다 더 빠르고 효율적으로 액세스 할 수 있는 임시 데이터 저장소. 속도 향상을 위해 사용. (원본에 접근하는 것보다 빠르게 접근 가능하도록 함)1.2. Redis를 캐시로 사용할 때의 장점단순한 key-value 구조로 어떤 데이터라도 쉽게 저장 가능.In-memory Data Store(모든 데이터를 메모리에 올려둠)로 빠른 처리 속도를 가짐1.3. 캐싱 전략[Read 전략] Look-Aside (Lazy Loading)데이터를 찾을 때 우선 cache를 확인하고, ..

[Backend/OAuth] 구글 로그인 기능 구현을 위한 토큰 발급 받기

만드는 웹 서비스에 구글 로그인 기능을 추가하기 위해 인증 서버인 구글에서 토큰을 발급받아 보았다. 1. goold cloud console (https://cloud.google.com/cloud-console) 접속해서 콘솔 버튼 클릭 2. 프로젝트 목록에 들어가서 새 프로젝트 생성 버튼 클릭  3. 프로젝트 생성 후 목록에서 생성된 프로젝트 선택   4. 왼쪽 메뉴에서 'API 및 서비스' - '사용자 인증 정보' 페이지로 이동5. 동의 화면 구성 앱 이름은 자유롭게 입력해 주고, 이메일을 꼭 기입. 대상은 외부를 선택.  6. 범위 설정 7. 클라이언트 생성애플리케이션 유형을 '웹 애플리케이션'으로, 이름은 자유롭게 기입. 다음 URI에 "http://localhost:8080/login/oaut..

[프로그래머스/Java] 섬 연결하기(Greedy 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 Greedy 파트 문제 중 하나인 '섬 연결하기'를 자바를 이용하여 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42861# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   접근 자체는 크게 어렵지 않다. 그냥 cost가 작은 순으로 costs 배열을 정렬해 주고, costs 배열을 순회하면서 아직 이어지지 않은 섬들을 이어주는 cost를 answer에 더해주고 리턴하면 된다.  이때, 아직 이어지지 않은 섬은 boolean 2차원 배열인 isLinked를 만들어서 확인해주었다. 다만 처음에는..

[프로그래머스/Java] 구명보트(Greedy 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 Greedy 문제 중 '구명보트' 문제를 자바로 풀어보았다.https://school.programmers.co.kr/learn/courses/30/lessons/42885# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr    우선 처음에 접근할 때는 아래 코드와 같이 리스트로 풀어보았다. 답은 전부 맞았으나, 효율성 측면에서 틀린 답이라고 나왔다.  List에 쓰고 지우는 과정이 시간효율성이 떨어져서 생긴 문제라고 생각해서 List로 변환하는 과정을 제거하고 Array로 바로 처리하는 방식으로 변경했다.import java.util.*;class Solution ..

[프로그래머스/Java] 큰 수 만들기(Greedy 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 Greedy 파트 문제 중 하나인 '큰 수 만들기'를 자바로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42883# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   순간순간의 최선을 찾는 Greedy 알고리즘의 특성을 이용하여, 바로 뒤 자신보다 큰 수를 방해하는 바로 뒤의 숫자보다 작은 첫 번째 숫자를 삭제하는 것을 k번 반복했다. 이때, 원래 j를 매 loop의 반복마다 1로 초기화했었는데, 딱 한 문제에서 시간초과가 발생했다. 그래서 굳이 다시 맨 처음으로 가는 게 아닌, 삭제한 바로 ..

[프로그래머스/Java] 조이스틱(Greedy 문제) 풀이

프로그래머스 코딩테스트 알고리즘 고득점 Kit 중 Greedy 알고리즘 파트에 해당하는 '조이스틱' 문제를 Java로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42860 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 Greedy 파트에 있는 문제이지만, greedy로 풀기는 너무 복잡한 문제였다. 각 커서에서 현재의 최단거리를 알 수 있다고 하나, 실상 그 방법이 더 효율이 떨어지고 확인해야 하는 부분이 너무 많다고 느껴졌다.  그래서 나는 아래 코드처럼 리스트를 활용해서 풀었다. 우선 알파벳 단위로 움직여 줘야 ..

[Backend] BFF(Backend For Frontend) 패턴

BFF는 Backend For Frontend의 줄임말로,  API를 직접 의존할 때 발생하는 문제들을 해결하고자 등장한 architecture이다. 문제 해결 방법으로 프론트엔드를 위한 중간 서버를 구현한다. 이 중간서버는 프론트엔드에 표현될 데이터를 위한 백엔드의 역할을 하게 된다. 백엔드 서버에서 받아온 API 응답값들을 좀 더 프론트 친화적으로 만드는 작업을 하는 것이다. 예를 들어, 아래와 같은 json 데이터를 백엔드로  BFF 아키텍처 패턴에는 여러가지가 있다. 1. 단일 BFF 패턴: 모든 클라이언트를 위해 하나의 BFF를 사용 (single BFF)2. 클라이언트별 BFF 패턴: 클라이언트 유형 별 BFF를 사용 (Web BFF, Mobile BFF, Deskop BFF)3. 기능별 BF..

[프로그래머스/Java] 체육복(Greedy 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 greedy 알고리즘 문제 중 하나인 '체육복'을 자바로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42862 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  Greedy 알고리즘에 대한 설명은 아래 블로그 글을 참고했다. Greedy를 너무 오랜만에 접하는 거라서 어떤 방법으로 문제에 접근해야 하는지 파악하기 위해서 읽어보았다. https://memodayoungee.tistory.com/103 [알고리즘] Greedy Algorithm(탐욕 알고리즘)탐욕 알고리즘이란? Greedy Algo..

728x90
반응형