본문 바로가기
안전 영역 - 백준 2468 (Java) https://www.acmicpc.net/problem/2468 풀이 지역의 높이에 해당하는 모든 값들만큼 각각 비가 왔다고 가정한다. 어느 높이만큼 비가 왔다고 가정했을 때, bfs 탐색으로 해당 경우에 몇 가지 안전 영역이 있는지 체크한다. main() //지역 높이 board static int[][] board; //각 지역의 높이값 저장할 set static Set set = new HashSet(); //각 bfs 탐색마다 false로 초기화 후, 방문 여부 체크할 배열 static boolean[][] isVisited; //board 사이즈 static int N; //row 방향 이동 배열 static final int[] DIRECTIONS_ROW = {-1, 0, 1 ,0}; //c.. 2022. 7. 22.
암호 만들기 - 백준 1759 (Java) https://www.acmicpc.net/problem/1759 풀이 해당하는 모든 경우에 대해 출력을 해야하므로 DFS 탐색으로 진행했다. main() static char[] alphabet; //모음 리스트 static List vowelList = new ArrayList(); static boolean[] isUsed; //최종 정답 기록하는 StringBuilder static StringBuilder sb = new StringBuilder(); //중간중간 임시로 기록하는 StringBuilder static StringBuilder tempSb = new StringBuilder(); public static void main(String[] args) throws IOException.. 2022. 7. 21.
[회고] 세 번째 기술 모의 면접 드디어 세 번째 기술 모의 면접이 있었다. 코딩 테스트를 보는 것과 비슷한 느낌이었다. 내가 처음 코딩 테스트 볼 때에도, 집에서 보는 건데도 시험 시작 몇 분 전부터 긴장되고, 중간에 컴퓨터가 멈출까 재부팅도 하고, '문제를 다 못 풀면 어떻게 하지' 막 이런 생각하면서 걱정하고 그랬다. 하지만 코딩 테스트를 여러 번 보다 보니 시험이 익숙해지기도 하고, 시험이 대충 어떤 식으로 흘러가는지 인지하고 있어서 편한 마음으로 보게 된다. 물론 시간은 아직도 촉박한 경우가 많다 :) 그걸 의도하고 빡빡하게 내니까 첫 번째, 두 번째 모의 면접을 할 때에는 하기 전부터 걱정되고, 한숨부터 쉬어지고 그랬는데 이번에는 그래도 몇 번 해봤다고 긴장이 덜 되는 느낌이었다. 페어 시간과, 라이브 세션으로 다져진 터라 온.. 2022. 7. 20.
String 연산 String 클래스는 immutable(불변)하다. 한번 메모리에 생성되면 그 뒤로 할당된 메모리 공간이 변하지 않는다. 문자열 연산을 하면 기존값에 붙는 것이 아니라 새롭게 String클래스 인스턴스를 메모리에 할당받아 생성된다. 따라서 멀티스레드 환경에서 thread-safe하지만, 문자열 연산이 많으면 성능이 떨어질 수 있다. 문자열을 붙일 땐 다음과 같은 방식이 있다. 1 .concat() 2.+연산 3. StringBuilder, StringBuffer 클래스 1. concat() String 클래스가 제공하는 기본 메소드다. concat()을 사용하면 문자열을 추가할 때마다 매번 새로운 String 인스턴스가 생성되기 때문에 성능, 속도가 좋지 않다. "a".concat("b").concat(.. 2022. 7. 17.
톱니 바퀴 - 백준 14891 (Java) https://www.acmicpc.net/problem/14891 풀이 일단, 톱니 바퀴를 하나의 Integer list로 정의하고, 총 4개의 톱니 바퀴를 하나의 list에 저장했다. (gearList) 1번의 회전마다, 회전시키기 전에 현재 인접한 톱니 바퀴끼리 같은 극인지 체크해 boolean[]인 isSame에 저장했다. checkIfSame() public static void checkIfSame() { Integer first = gearList.get(0).get(2); Integer second = gearList.get(1).get(6); Integer third = gearList.get(1).get(2); Integer fourth = gearList.get(2).get(6); I.. 2022. 7. 17.
[2022 OSSCA] Git / GitHub 특강 오늘 아카데미에서 git / github 특강이 있었다. 평소 페어로 과제를 진행할 때 git을 이용하고 있었고, 개인적으로 알고리즘 문제를 풀고서도 github에 항상 commit을 남겼기 때문에 기본적인 사용법은 익숙했다. 하지만 오늘 특강은 오픈소스 아카데미 특성에 맞게 오픈소스 개발에 직접 참여할 때 필요한 기능들을 위주로 진행됐다. 오전 9시부터 오후 1시까지는 기본 실습을, 오후 2시부터 오후 5시까지 고급 실습, 오후 6시까지는 3~4명이 팀이 되어 팀별 실습이 진행됐다. 실시간 온라인으로 진행됐지만 조교님들이 상주하셔서 필요할 때마다 바로 도움을 받을 수 있었고 질문도 바로 할 수 있어서 학습하기 굉장히 편한 환경이었다. 또한 강사님이 오픈소스 개발 경험이 많으셔서 본인이 직접 겪은 상황을.. 2022. 7. 16.
[2022 OSSCA] 첫 온라인 모임 오늘 밤에 Zeppelin팀의 첫 온라인 모임이 있었다. 사실 모임이라기보다는 멘토님이 진행하시는 세션이었다. 이번 세션에서는, 지난 주말에 발대식이 있고서 디스코드에서 가장 많은 이야기가 나왔던 윈도우 환경에서의 빌드 이슈에 대한 설명을 시작으로, 본격적으로 컨트리뷰트하기 전에 Zeppelin이 크게 어떤 코드 구조를 가지고 있는지 직접 코드를 보면서 큰 그림을 그려보는 시간을 가졌다. 윈도우 환경에서의 빌드 이슈 대부분의 개발자들이 Mac 환경에서 작업을 하다보니 Zeppelin을 윈도우에서 빌드할 때 여러 문제가 발생했다. 나 또한 윈도우 환경이기 때문에 빌드에 성공하지 못했었다. 며칠 간은 빌드했다가 실패하고 지웠다가 다시 하고, 또 실패하고를 반복했다. WSL에서는 된다고 해 리눅스에서도 해봤지.. 2022. 7. 14.
로마 숫자 - 백준 2608 (Java) https://www.acmicpc.net/problem/2608 풀이 1. 아라비아 문자를 숫자로 변환한다. 현재 문자와 바로 뒤 문자를 비교해서 각 문자에 해당하는 숫자가 뒤 문자가 더 크다면 (뒤 문자에 해당하는 숫자 - 현재 문자에 해당하는 숫자)를 더해준다. 나머지 경우는 현재 문자에 해당하는 숫자를 더해주면 된다. 2. 숫자를 아라비아 문자로 변환한다. 일단 현재 처리하고 있는 자릿수가 천의 자리인지 백의 자리인지 십의 자리인지 일의 자리인지에 따라 사용할 아라비아 문자가 정해진다. 즉, 다시 말해 각 자릿수에서의 1, 5, 10을 담당하는 아라비아 문자가 정해진다. 예를 들어 4에 대해서 백의 자리라면 CD, 십의 자리라면 XL, 일의 자리라면 IV가 된다. 각 자릿수에 해당하는 숫자에 따라.. 2022. 7. 12.
도로의 개수 - 백준 1577 (Java) https://www.acmicpc.net/problem/1577 풀이 먼저 아무 조건없이 격자 맵을 이동할 때 각 꼭지점마다 도달할 수 있는 경우의 수를 적어서 최종 목적지까지 도달하는 경우의 수를 구하는 방법을 생각했다. 이동 방향이 왼쪽 아래에서 오른쪽 위로 이동하기 때문에 현재 자신의 왼쪽 지점과 아래 지점까지 도달한 경우의 수의 합을 적어주면 된다. 여기서 이동할 수 없는 도로가 생겼을 땐, 해당 도로를 이동해야 자신에게 도착하는 경우의 수를 더하지 않으면 된다. 만일 왼쪽과 아래 점에서 오는 도로를 둘 다 이용하지 못할 경우 해당 지점에 도착하는 경우의 수는 0이 된다. 이를 코드에 옮기기 위해서, 꼭지점과 도로에 대한 정보를 담을 배열이 둘 다 필요했다. 그래서 꼭지점에 대한 이차원 배열 (.. 2022. 7. 10.
도서관 - 백준 1461 (Java) https://acmicpc.net/problem/1461 풀이 1. 일단 양수 위치와 음수 위치의 책을 분리해서 그룹을 지었다. 왜냐하면 어차피 한 그룹 안에 지정되어도 한 쪽 갔다가 되돌아와서 0을 지나 다시 반대 쪽으로 갔다가 돌아오기 때문에 그룹으로 지정하는 의미가 없기 때문이다. 2. 다음으로 고려한 부분은, 마지막에 모든 책을 제자리에 놔둔 후에는 0으로 돌아올 필요가 없기 때문에 절대값이 가장 큰 그룹을 마지막에 옮겨야한다. 3. 그리고 각 부호에서 가장 끝 수(가장 절대값이 큰 수)부터 그룹을 지었다. 예를 들면, 책이 3 6 8 20 25 위치에 있고 한 번에 옮길 수 있는 책이 2권이라 가정해보자. 만일 절대값이 가장 작은 수부터 그룹을 지으면 (3 6) (8 20) (25)가 된다. .. 2022. 7. 10.