전체 글

전체 글

    (JAVA) 올바른 괄호의 갯수

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 난이도가 4인 문제임을 생각하면 코드가 매우 단순함을 확인할 수 있다. 코드 자체는 단순한데 문제 풀이를 위한 방법을 생각하는 것이 어려운 문제라고 생각할 수 있다. n개 이전의 괄호쌍으로 만들 수 있는 개수를 활용하는 Dynamic Programming을 사용하여 풀이하였다. 예를 들어 괄호쌍 2개와 3개를 사용해 만들 수 있는 전체 올바른 괄호쌍의 개수를 계산해 보겠다. 우선..

    (JAVA) 양과 늑대

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 class Solution { int[] gInfo; // DFS에서 사용할 노드의 정보 int[][] gEdges; // DFS에서 사용할 간선의 정보 int maxValue = 0; public int solution(int[] info, int[][] edges) { gInfo = info; gEdges = edges; boolean[] isVisited = new bool..

    (JAVA) 합승 택시 요금

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 최소거리비용 알고리즘으로 유명한 다익스트라 알고리즘을 사용한 풀이이다. 전체적인 문제 해결 방법은 아래와 같다. mat이라는 이름의 인접 행렬을 각 지점 간의 금액을 담고 있는 fares 배열을 사용하여 생성한다. mat을 바탕으로 두 사람이 합승하여 출발 지점부터 다른 모든 정점까지 가는 최소 비용을 다익스트라 알고리즘을 사용하여 알아내고 이를 both라는 배열에 저장한다. 시..

    단위 테스트(Unit Test)와 통합 테스트(Integration Test)

    앞선 포스트에서는 테스트 코드란 무엇인지, 또 테스트 코드를 작성하는 이유는 무엇인지에 대해 간단하게 알아보았다. 테스트 코드는 왜 만들까? 테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험 lildev.tistory.com 이번에는 테스트 코드의 다양한 종류와 각 종류 별로 소프트웨어의 어떤 부분에 집중하는지, 그리고 그중에서도 특히 단위 테스트와 통합 테스트에 대해 자세하게 알아보겠다. 테스트 코드의 종류 테스트 코드에는 단위 테스트, 통합 테스트, 부하 테스트 등 우리가 흔히 들어본 테스트 방식뿐만 아니라 인수 테스트, 회귀 테스트, E2E 테스트 등 정말 많..

    (JAVA) 길 찾기 게임

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42892 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이진트리를 사용한 기본적인 문제이다. 아래와 같은 순서로 구현해나가며 문제를 풀 수 있었다. 트리에 사용할 Node 클래스 구현 nodes라는 node들을 담을 리스트에 node를 삽입 nodes를 y의 내림차순으로, y가 동일하다면 x의 오름차순으로 정렬 (트리에 올바른 순서대로 담기 위함) 정렬된 리스트에서 node를 하나씩 꺼내면서 트리 만들기 완성된 트리를 전위 순회한 값..

    (JAVA) 금과 은 운반하기

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/86053 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이분 탐색과 Parametric Search를 사용한 풀이이다. Parametric Search는 특정 상황을 만족하는 특정값의 최대 혹은 최댓값을 구하는 최적화 문제에 적용할 수 있음을 생각하고, 이 알고리즘을 이번 문제에 적용할 생각을 하는 것이 중요하다. Parametric Search는 최적화 문제를 결정 문제로 바꾸는 것이다. 이번에 풀이한 '금과 은 운반하기' 문제를 ..

    테스트 코드는 왜 만들까?

    테스트 코드는 왜 작성할까? 사실 백엔드 개발을 학습하면서 "테스트 코드가 중요하다. 실무에서 매우 중요하다." 이런 말을 정말 수도 없이 많이 들었었다. 하지만 이전까지 나의 프로젝트 경험을 돌아보았을 때 나 자신에게도 "중요하다. 중요하다." 되뇌기만 하였을 뿐 실질적으로 프로젝트 내에서 진행한 적은 없었다. 이런 상황에서 네이버 부스트캠프에서 곰터뷰 프로젝트를 진행하면서, 꼭 테스트 코드를 프로젝트에 적용해보고 싶다는 생각을 하였었다. 다행히도 함께 백엔드 파트를 진행하신 팀원분께서 테스트 코드를 사용하신 경험이 있으셨기에, 큰 부담 없이 테스트 작성을 학습해 가며 진행할 수 있었다. 학습을 통해 알게 된 테스트 코드를 작성하는 이유를 정리해보고, 또한 프로젝트를 통해 직접 테스트 코드 작성을 경험..

    SSAFY 11기 전공자 합격 후기 (면접 스터디 X)

    SAFFY 11기에 지원하여 합격하였기에 어떤 방식으로 선발 과정이 진행되고 또 어떻게 준비하였는지 정리를 하면 다른 지원자들에게 큰 도움이 될 것이라고 생각하여서 전체적인 과정을 간단하게 정리해보고자 한다.지원서지원서는 매우 간단한 양식이었다. 인적사항, 학력, 교육희망지역, 경력 등 아주 간단한 개인정보를 입력하면 된다.인적사항이 당락에 영향이 크게 있진 않겠지만, 참고로 필자의 경우에는 인서울/3.8/컴퓨터공학과 전공생이었고, 경력과 자격증은 없었고, 1지망 - 서울/2지망 - 대전으로 지원하였다.에세이에세이의 경우에는 지원서 마감일 다음날부터 그 주의 주말 정도까지 입력해야 했다. 걱정과는 다르게 에세이의 경우 하나의 질문만 작성하면 되었기에 시간적인 여유는 충분했다.SW 관련한 경험과 SAFFY..

    (CS) 무중단 배포

    프로젝트나 서비스 개발에 백엔드 개발자로 참여하였을 때, 로컬이 아닌 실제 환경에서 개발한 기능들을 테스트하고 또 사용하기 위해서 반드시 진행해야 하는 작업이 있다. 그것은 바로 배포이다. 1년이 넘는 시간 동안 백엔드 개발을 많이 진행하였기에 여러 번 배포를 진행하였지만, 무중단 배포에 대해서는 들어만 보았을 뿐 정확하게 어떤 방식으로 진행되는지에 대한 학습조차 되어 있지 않았다. 현재 진행 중인 프로젝트에서 무중단 배포를 진행해 볼 기회를 얻어서 이에 대해 학습 후 정리해보고자 한다. 배포란? 무중단 배포에 대해 정리하기에 앞서 배포가 무엇인지 먼저 간단하게 알아보고자 한다. 배포라는 단어 자체는 원래 신문이나 책자 등을 널리 나누어주는 행동을 나타내는 말이다. 소프트웨어 관점에서 말하는 배포도 역시..

    (JAVA) 백준 2805번 - 나무 자르기

    문제 링크: https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 풀이 처음에는 브루트 포스를 사용하여 아래와 같이 풀이해 보았다. import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { public static void main(String[] a..