코드스쿼드 프리코스 3주차 회고
·
코드스쿼드
3주차는... 어느덧 프리코스도 3주차를 마무리하고 한주만을 남겨두게 되었다. 매주 쉽지 않은 과정이었지만, 이번 주는 특히 힘들었다. 내가 부족하다고 생각한 개념이 미션에서 키워드로 저격... 제시되었고 키워드만 이해하고 정리하는데 코어 타임 대부분을 사용했다. 그러다 보니 지금까지 과제를 제출하지 못한 적이 없었는데, 이번 주는 몇 번 제출하지 못해서 자존심이 상하기도 했다. 거기에 같이 진행하고 있는 우테코 미션도 점점 난이도가 높아져서 구현에 많은 시간을 투자해야만 했다. 매일 아침해가 뜨는 것을 보고 잤지만 그래도 시간이 부족하다 느꼈다. 압박감에 깊게 자지 못하고 꿈에서도 못다한 과제를 했다. 그러나 완전히 집중했냐고 물어보면 그러지는 못했던 것 같다. 생각하지도 못한 고민이 생겨서 당황스럽고..
코드스쿼드 프리코스 2주차 회고
·
코드스쿼드
난 정말 자바를 모른다고요! 나는 코딩을 처음 배울 때부터 지금까지 대부분 Java만을 사용해 왔었고 나름 Java와 친숙해졌다고 생각하고 있었다. 그런데 2주차 미션을 진행하면서 알았다고 생각했던 지식을 막상 적용해보려니 생각처럼 되지 않고, 팀원들의 왜?라는 질문에 설명하려니 말문이 막히곤 했다. 그런 나 자신의 모습을 보며 난 Java에 대해서 아무것도 모른다는 생각이 들었다. 거기에 객체지향 개념을 더하려니 머리가 너무 혼란스러워지곤 했다. else 예약어를 쓰려고 할 때마다 망설여지고, 다른 방법이 생각나지 않아 getter / setter를 만들때마다 죄짓는 기분이 들었다. 그리고 만들어진 나의 코드를 보며 난 대체 뭘 만들었을까.... 라고 느끼곤 했다. 혼자가 아니니까 그럼에도 우리는 나아..
코드스쿼드 프리코스 1주차 회고
·
코드스쿼드
프리코스 이전.... 작년 8월 국비교육을 마치고 긴 방황이 시작되었다. 취업을 위한 코딩 테스트 준비와 개인 공부로 1년을 보내게 되었고 결과가 좋지 못했었다. 매번 안 좋은 결과만 보다 보니 1년간 제대로 성장하지 못한 것 같아서 정말 힘들었다. 앞이 안 보이는 어두움 속에서 제자리만 빙빙 도는 것 같은 느낌이었고 참 막막했다. 무엇보다 외로움이 가장 컸다. 주변에 개발자 선배, 친구도 없어 코드에 대해 이야기도 하고, 함께 성장할 사람이 없었다. 그래서 혼자서 많이 힘들었던 기억이 난다. 그러던 중 예전부터 관심이 있었던 코드스쿼드에서 마스터스 코스 이전에 프리코스를 진행한다는 것을 알게 되었다. 원래 목표는 마스터스 코스에 합류하는 것이었지만 혼자서 뭔가를 더 할 자신이 없어서 고민하지 않고 등록..
(Java) 프로그래머스 - 베스트앨범
·
코딩 테스트
한번에 로직이 세워지지 않았던 문제이다. HashMap에 익숙해졌다고 생각했지만 values를 기준으로 내림차순 정렬하는데 어려움을 겪었다. 로직 먼저 genres와 play값을 HashMap에 넣어 각 장르별 플레이 횟수를 센다. 그리고 keySet을 리스트에 넣어 플레이 횟수별로 내림차순 정렬한다. 정렬된 list의 값을 순회하면서 첫번째와 두번째로 많이 재생된 노래의 인덱스를 result 리스트에 넣고 마지막으로 배열로 복사해서 반환하면 된다. 최종 코드 import java.util.*; class Solution { public int[] solution(String[] genres, int[] plays) { List result = new ArrayList(); // 각 장르별로 HashMa..
(Java) 프로그래머스 - 단속카메라
·
코딩 테스트
오랜만에 문제를 읽고 어떻게 풀어야 하는지 감이 오지 않았다. 문제 유형이 그리디로 분류되어 있었지만, 로직 자체가 생각나지 않았다. 결국 고민하다가 검색을 통해서 힌트를 얻었다. 로직 이 문제의 키포인트는 정렬이다. 각 자동차의 진출 시간인 routes [i][1] 값을 기준으로 정렬하면 문제를 쉽게 해결할 수 있다. 왜냐하면 n번째 자동차의 진출시간과 n+1 자동차의 진입시간을 비교해 n+1번째 자동차의 진입시간이 n번째 자동차의 진출 시간 이전이라면 카메라의 숫자를 늘릴필요가 없어 다음 차량으로 넘어가면 되고, n+1번째 자동차의 진입시간이 n번째 자동차의 진출 시간 이후라면 min의 값을 바꾸고 카메라의 숫자를 +1 하면 되기 때문이다. 최종 코드 import java.util.*; class S..
(Java) 프로그래머스 - 등굣길
·
코딩 테스트
문제를 읽고 DFS / BFS로도 풀 수 있겠다는 생각을 했다. 그런데 문제 유형이 DP로 분류되어 있어서 시간 초과가 나지 않을까 싶어서 DP로 풀수 있는 방법을 생각해서 해결했다. 로직 먼저 m x n인 arr 배열을 만들고 웅덩이를 -1로 초기화한다. 그리고 첫 번째 행과 열이 아니면 이전 행과 열의 값을 더하며 탐색을 진행한다. 최종적으로 마지막 행과 열에는 도달할 수 있는 방법의 개수가 값으로 들어있게 된다. 최종 코드 class Solution { public int solution(int m, int n, int[][] puddles) { int answer = 0; // n x m 배열 초기화 int[][] arr = new int[n][m]; // 시작점은 1 arr[0][0] = 1; ..
(Java) 프로그래머스 - 단어 변환
·
코딩 테스트
DFS / BFS 둘 중 편한 것을 선택해서 풀 수 있는 문제였다. DFS가 더 편해 보여서 DFS를 이용해서 풀었는데 로직을 설계하는 게 어려워서 꽤 고민하며 풀었었다. 테스트 케이스도 5개밖에 되지 않고, 입력값이 크지 않아서 수행 시간은 생각하지 않고 풀었다. 로직 먼저 words와 동일한 크기로 방문 배열을 초기화한다. 다음으로 target 문자열이 words 배열에 있는지 검사한다. target 문자열이 words에 없다면 바로 0을 반환하고 탐색하지 않는다. 그리고 DFS 탐색을 시작하는데 begin 문자열이 target 문자열과 몇 글자가 다른지 확인한다. 만약 한 글자만 다르다면 한 번만 변환하면 되므로 리스트에 cnt + 1 값을 저장한다. 한 글자 이상이 다르다면 words 배열을 순회..
(Java) 프로그래머스 - 혼자 놀기의 달인
·
코딩 테스트
문제가 잘 이해되지 않아서 몇 번을 읽었다. 이해하고 보니 결국 연결되어 있는 노드의 개수를 저장하고 최댓값 2개를 꺼내서 곱을 반환하면 되는 문제였기에 DFS를 이용해서 풀이했다. 로직 cards 배열의 크기가 처음 선택하는 카드의 숫자이기 때문에 visited 배열의 크기를 n으로 설정한다. 첫 번째 상자부터 n번째 상자까지 순회하며 방문하지 않았다면 DFS 메서드를 호출하고 재귀 탐색한다. 열었던 상자까지 도달하면 상자의 개수를 우선순위 큐에 넣고 리턴한다. 모든 순회가 끝나면 우선순위큐의 첫 번째 두 번째 값을 곱해서 answer를 반환한다. 이때 우선순위큐의 사이즈가 1이면 첫 번째 상자 그룹 하나밖에 없다는 의미임으로 0을 반환한다. 최종 코드 import java.util.*; class S..
(Java) 프로그래머스 - 할인 행사
·
코딩 테스트
새롭게 나온 레벨 2 문제인데 입력값이 크지도 않고 로직이 복잡한 것도 아니라서 어렵지 않다. 어느 기업인지는 기억이 안나지만 코딩 테스트에서 비슷한 문제를 풀었던 기억이 있다. 로직 i일부터 10일동안 할인 품목을 map에 넣는다. 그리고 각 품목을 비교하는데 하나라도 number보다 작으면 안 되므로 작은 값이 나오면 탐색을 중단한다. 또한 map에 want 품목이 하나라도 없으면 안 되므로 마찬가지로 탐색을 중단한다. 모든 조건이 맞으면 answer 값을 증가시킨다. 최종 코드 import java.util.*; class Solution { public int solution(String[] want, int[] number, String[] discount) { int answer = 0; //..