Seren dev's blog
article thumbnail
[우아한 테크코스 백엔드 5기] 프리코스 1주차 회고

프리코스 1주차 미션을 진행한 과정, 느낀 점, 개선할 점을 작성한 회고록이다. 프리코스 1주차 미션은 온보딩 미션으로, 7개의 코딩 문제를 풀어 제출하면 된다. 일반 코딩테스트에서 나올 만한 코딩 문제들이었다. "기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋하는 방식으로 진행" => 한꺼번에 커밋하지 않고, 구현한 기능별로 메시지와 같이 커밋 메시지를 보내는 방식으로 진행했다. 프리코스 1주차 온보딩 미션 Github 링크 나의 Github 링크 🚀 Problem1 예외사항을 주의하여 기능을 구현했다. 예외사항인 경우 왼쪽 페이지는 홀수, 오른쪽 페이지는 짝수 번호가 아닌 경우 두 페이지가 연속된 페이지가 아닌 경우 시작 면이나 마지막 면이 나오는 경우 기능 목록 예외사항인 경우를 처리하..

article thumbnail
[프로그래머스] Lv.1 : 숫자 문자열과 영단어 - 자바[Java]

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 enum 클래스 NumStr를 생성하여 대응되는 영단어와 숫자를 저장하고, replace() 메서드를 사용하여 영단어 NumStr.str부분을 숫자 NumStr.num으로 치환한다. 코드 import java.util.*; class Solution { static public enum NumStr { ZERO("zero", 0), ONE("one", 1), TWO("two", 2), THREE("three", 3), FOUR("four", 4), FIVE("five", 5), SIX("six", 6),..

article thumbnail
[프로그래머스] Lv.2 : [1차] 뉴스 클러스터링 - 자바[Java]

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 입력으로 들어온 각 문자열에 대해 두 글자씩 끊어서 Map에 (글자쌍, 글자쌍이 현재 문자열에서 등장한 횟수)를 저장한다. 똑같은 문자열이 두 번 이상 등장할 수 있는데, 이후 교집합이나 합집합을 구할 때 두 문자열에서 공통적으로 등장하는 글자쌍인 경우, 각 문자열의 해당 글자쌍이 등장한 횟수가 필요하기 때문에 Map을 사용하여 글자쌍이 현재 문자열에서 등장한 횟수도 저장해야 한다. 그 다음 교집합 원소의 개수와 합집합 원소의 개수를 구해 답을 반환한다. 로직 1. convertStrToPair() 메서..

article thumbnail
[프로그래머스] Lv.2 : 튜플 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 튜플을 표현하는 모든 집합에 들어있는 각 숫자들의 개수를 세면 첫번째 예시의 경우 2는 4개, 1은 3개, 3은 2개, 4는 1개다. 즉, 개수가 많은 순대로 answer 배열에 저장하면 된다. 문자열 s에 저장되어있는 각 집합을 구한 후, 각 집합에 있는 숫자들을 구해서 숫자와 숫자가 등장한 횟수를 Map에 저장한다. 문자열 s는 "{{2},{2,1},{2,1,3},{2,1,3,4}}" 와..

article thumbnail
[프로그래머스] Lv.2 : 배달 (그래프 최단 경로 알고리즘) - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/12978 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이1 : 다익스트라 - 순차 탐색, 인접 배열 최단 경로 알고리즘을 사용하여 1번 마을부터 각 마을까지의 최단 시간(경로)를 구해야 한다. 최단 경로 알고리즘이란 주어진 그래프에서 한 정점(노드)에서 다른 정점까지의 최단 경로를 구하는 알고리즘이다. 대표적인 최단 경로 알고리즘은 3가지가 있다. 다익스트라 알고리즘 (default, 가중치가 모두 양수 = 음수X) 벨만 포드 알고리즘 (dista..

article thumbnail
[프로그래머스] Lv.2 : 방문 길이 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 캐릭터가 지나간 길을 저장하는 Set 타입 변수를 사용하여 캐릭터가 처음 걸어본 길의 길이(Set의 크기)를 구한다. 길의 정보를 저장하기 위한 클래스 Line을 생성하고, Line은 시작점의 좌표와 도착점의 좌표 둘 다를 저장해야 하므로 int 형 변수 prevX, pervY, curX, curY를 필드 변수로 선언한다. 또한 Set형 변수 lineSet을 사용하므로 lineSet의 중복성..

article thumbnail
[프로그래머스] Lv.2 : 점프와 순간이동 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 - BFS (실패) 처음에 문제를 보고 BFS로 풀려고 했다. 하지만 N이 10억 이하의 자연수이며 풀이 과정도 시간이 오래 걸리는 문제가 생겼다. 정확성 테스트는 모두 맞았지만, 효율성 테스트에서 메모리 초과/시간 초과로 모두 실패했다. 다음은 BFS를 사용한 테스트에서 실패한 코드다. import java.util.*; public class Solution { public int sol..

article thumbnail
[프로그래머스] Lv.2 : 스킬트리 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/49993 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 skill_trees에 저장된 각 스킬 트리가 가능한 스킬트리인지 검사한 후 가능한 스킬트리의 개수를 출력해야 한다. 스킬트리가 가능한 스킬트리인지는 skill에 저장되어있는 스킬들의 순서를 통해 알 수 있다. 이를 위해 skill에 저장되어있는 스킬들의 순서를 통해 Map 타입 변수 skillMap을 선언해 (스킬 이름, 스킬 순서)를 저장한다. 이후 skill_trees에 저장된 각 스킬..

article thumbnail
[프로그래머스] Lv.2 : 영어 끝말잇기 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/12981?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 영어 끝말잇기가 끝나는 사람의 번호와 차례를 구해야 한다. 영어 끝말잇기가 끝나는 경우는 2가지다. 이전에 등장했던 단어를 사용할 때 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말하지 않은 경우 영어 끝말잇기가 끝나는지 검사하는 메서드를 사용해 영어 끝말잇기가 끝나는 경우 그 사람의 번호와 차례를 구한다. 이전에 등장했던 단어를 저장하기 위해 Set 형 변수..

article thumbnail
[Softeer/소프티어] 강의실 배정(그리디 : Greedy) - 자바[Java]

https://softeer.ai/practice/6291 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 풀이기본적인 그리디 문제다.강의가 끝나는 시간으로 정렬빨리 끝나는 것부터 먼저 함(선택)그 다음 강의 시작시간이, 그 전 강의 종료시간보다 크거나 같으면 선택종료시간 오름차순으로 정렬한 다음, 시작시간 오름차순으로 정렬되도록 한다.로직1. 강의의 시작시간과 종료 시간을 저장하기 위한 클래스 Lecture를 만든다. Lecture는 종료시간 오름차순으로 정렬한 다음, 시작시간 오름차순으로 정렬되도록 한다.2. 강의의 개수 n을 입력받는다.3. 강의의 정보를 저장할 List lectures를 선언한다.4. n개의 강의의 시작시간과 종료시간을 입력받는다.5. lectures를 정렬한..

article thumbnail
[Softeer/소프티어] 징검다리(최장 증가 부분 수열 : LIS) - 자바[Java]

https://softeer.ai/practice/6293 Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai  풀이최장 증가 부분 수열 문제다.DP를 사용하여 풀 수 있으며 O(n^2) 의 시간복잡도를 가진다.DP를 사용하기 위해 돌의 개수 n만큼의 크기를 가지는 int형 1차원 배열 dp를 선언한다.dp[i] = i번째 돌이 마지막 돌일 때  철수가 밟을 수 있는 돌의 최대 개수 주의할 점dp[n-1]에 최댓값이 저장되지 않는다. 따라서 최댓값을 따로 저장하여 dp 배열의 값을 구할 때마다 최댓값을 업데이트해야 한다. 로직1. 돌의 개수 n을 입력받는다.2. 돌의 높이를 저장할 int[] stones 배열과, int[] dp 배열을 선언한다. 둘 다 크기는 n만큼 할당한다.3. 돌의..

article thumbnail
[프로그래머스] Lv.2 : N개의 최소공배수 - 자바[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 앞에서부터 두 수의 최소공배수를 구하고, 구한 최소공배수와 배열의 다음 수의 최소공배수를 또 구하고, 이런 과정을 반복해서 최종적으로 모든 수의 최소공배수를 구하면 된다. 로직 1. a, b, gcd, lcm 변수를 선언한다. 2. a와 lcm은 arr[0]으로 초기화한다. arr은 길이가 1이상인 배열이기 때문에 첫번째 원소가 바로 정답이 될 수 있기 때문이다. 3. for문에서 다음과 같..