전체 글 123

[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..

[프로그래머스/Java] 모음사전(완전탐색 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 완전탐색 문제 중 하나인 '모음사전'을 자바로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/84512 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 전에 대회나 코딩테스트에서 마주친 적이 있는 문제와 비슷했다. 그때는 이걸 완전탐색으로 접근할 생각을 못하고 규칙을 찾다가 예외가 너무 많아서 포기했는데, 알고 보니 완전탐색 문제였다. 완전탐색 문제라는 걸 인지하고 나니, 모든 경우의 수를 만드는 게 관건이지, 조건을 체크하는 건 크게 어렵지 않았다.  그래서 완전탐색으로 이 문제를 ..

[프로그래머스/Java] 피로도(완전탐색 문제) 풀이

프로그래머스의 알고리즘 고득점 Kit 문제 중 완전탐색 파트에 해당하는 '피로도' 문제를 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   이 문제는 프로그래머스의 코드챌린지에 참여했을 당시 만났던 문제 같다. (아닌가.. 다른 코테였나...?) 그때 이 문제를 해결하지 못했던 기억이 있다. 뭔가 이 문제에 접근할 효율적인 알고리즘을 찾느라, 정렬도 해보고 이것저것 시도를 해보다 결국 기본점수 정도 받고 시간이 부족해서 포기했던 것으로 기억하는데, 완전탐색 문제라는 걸 알고 꽤..

[프로그래머스/Java] 소수 찾기(완전탐색 문제) 풀이

프로그래머스 알고리즘 고득점 Kit의 완전 탐색 문제 중 하나인 소수 찾기 문제를 Java로 풀어보았다. https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  이 문제는 완전탐색을 하면서 조건을 확인하는 것보다는 완전탐색을 할 수 있도록 모든 경우를 만드는 것이 관건인 문제였다. 사실 소수인지 아닌지 판단하는 건 간단하다. 아래 코드에 is_prime() 함수가 작성된 것처럼, 2 이상의 수로 자기 자신 외에 나눠지는 수가 하나라도 있으면 소수가 아니므로, 이를 파악해주기만 하면 된다. whil..

728x90