분류 전체보기

    백준 5179번 : 우승자는 누구?

    import java.io.*; import java.util.*; import java.util.stream.Collectors; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); List list = new ArrayList(); for (int i = 0; i < n; i++) { S..

    [Docker] Unexpected wsl error 해결

    [Docker] Unexpected wsl error 해결

    대충 이런 오류가 떴었는데 아래 명령어를 실행하고 재부팅했더니 해결됐다. wsl --update netsh winsock reset 아래 게시물을 참고했다. https://mukstory97.tistory.com/48 An unexpected error was encountered while executing a WSL command. Common causes include access rights issues, which occur after 발생 Error An unexpected error was encountered while executing a WSL command. Common causes include access rights issues, which occur after waking th..

    [이코테] 탐색 알고리즘 DFS/BFS

    [이코테] 탐색 알고리즘 DFS/BFS

    DFS depth-first Search의 약자. 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 먼저 그래프의 기본 구조를 알아야 하는데, 그래프는 노드와 간선으로 표현되며 이때 노드를 정점이라고도 함. 그래프 탐색이란? 하나의 노드를 시작으로 다수의 노드를 방문하는 것. 두 노드가 간선으로 연결되어 있다면 '두 노드는 인접하다' 라고 표현 프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있음. 인접 행렬 인접 리스트 인접 행렬 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식. 연결된 그래프를 인접 행렬로 표현할 때 파이썬에서는 2차원 리스트로 구현. 연결이 되지 않은 노드끼리는 무한의 비용이라고 작성함. 실제 코드에선 정답이 될 수 없는 큰 값 중에서..

    백준 18111번 : 마인크래프트

    정말 어려운 문제였다. 오랬동안 코테를 풀지 않아서 감이 떨어졌을 수도 있지만 그 점을 감안하더라도 체감상 매우 어려웠다. 코드를 설명하자면, 입력을 배열로 받고 최대 높이인 256까지 for loop을 돌면서 연산을 수행하는데, 이때 숫자를 i라고 하자. 그리고 입력받은 배열을 다시 loop를 돌린다. 이때 숫자는 n이라고 가정한다. 만약 n > i 라면 인벤토리에 n - i만큼의 값을 추가하고 걸린시간을 의미하는 sum 변수에 2초 * n에서 i를 뺀 값 만큼을 더한다. n < i 라면 인벤토리에서 블럭을 i - n만큼 빼서 걸린시간을 1초 * i - n값만큼 더한다. 입력받은 배열의 loop가 끝나면 인벤토리에 0 이상의 블럭이 남아있고 걸린시간이 최소거나 최소이고 최대 블럭이 더 클 때 최대블럭값..

    [이코테] 꼭 필요한 자료구조 기초

    탐색 탐색이란 ? 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룸. 대표적으로 DFS, BFS가 있음. 사전 지식: 스택, 큐, 재귀함수 자료구조 데이터를 표현하고 관리하고 처리하기 위한 구조. 다음의 두 핵심 함수로 구성 삽입(Push): 데이터를 삽입 삭제(Pop) : 데이터를 삭제 오버플로 : 데이터가 이미 가득찬 상태에서 삽입 시 발생 언더플로 : 데이터가 없는 상태에서 삭제 시 발생 스택 박스 쌓기에 비유할 수 있음. (아래 -> 위로 쌓음) 아래에 있는 박스를 치우기 위해선 위에 있는 박스 먼저 내려야 함. = 후입선출 큐 대기 줄에 비유할 수 있음. (먼저 온 사람이 먼저 들어감) = 선입선출 재귀 함수 ..

    백준 1195번 : 킥다운

    전에 실패했던 문제였는데 그리디에 자신감이 붙어서 다시 한번 시도해봤다! if문의 순서만 바꾸면 되는 간단한 문제였다.. 원리는 두개의 배열을 입력받고 더 긴 배열에 앞부분부터 더 작은 배열의 길이 - 1 만큼 0을 추가하는 것이다. 그 다음에 0을 제거해 나가면서 맞물리지 않는 부분이 있는지(같은 인덱스에 있는 두 배열의 값의 합이 3을 넘는지) 체크를 한 후 조건을 만족하면 현재의 길이를 리스트에 저장한 후 마지막에 가장 짧은 길이를 찾아서 출력한다. import java.io.*; import java.util.ArrayList; import java.util.List; class Main { public static void main(String[] args) throws IOException {..

    백준 1700번 : 멀티탭 스케쥴링

    골드1문제가 어느 정도 난이도인지 감을 잡기 위해서 한번 도전해봤다! 같은 티어대 문제중에선 쉬운편 인 것 같다. 역시 원리는 간단하다. n개 플러그에 꽂을 k개의 수를 입력받고 플러그에 꽂혀있는 수를 저장할 리스트에 초기값으로 중복되지 않은 3개의 값을 넣어준다. 그리고 k개의 수를 반복문을 돌면서 비교하는데 이때 꽂혀있는 플러그를 뽑는 조건은, 1. 이후에 사용할 일이 없을때 2. n개의 플러그 중에 가장 마지막에 사용할때 이렇게 된다. 이 두가지 조건만 구현해주면 간단하게 풀 수 있다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public ..

    백준 1339번 : 단어 수학

    두번째 골드레벨을 클리어했다! 원리는 간단하다. 입력받은 문자를 배열로 만든 후 각 문자의 자리 수를 구하여 10의 거듭제곱으로 변환 후 문자를 키로, 변환 한 숫자를 값으로 맵에 넣는다. 이미 해당 키가 있을 시에는 값을 불러와서 더한다. EX) ABA -> map.put('A', 100); map.put('B', 10); map.put('A', map.get('A') + 1); 그런 다음 해당 map을 값으로 정렬하여 list에 담고 해당 list의 요소들을 작은 것부터 순서대로 숫자를 매겨서 새 map에 넣는다. (B, 8), (A,9) 그러고나서 처음에 입력받은 문자열을 map에 key로 넣어서 해당하는 숫자로 변환하여 stringbuilder에 append한다. 모두 append하면 parseI..

    백준 12904번 : A와 B

    import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); StringBuilder t = new StringBuilder(br.readLine()); int n = 0; while (t.length() != 0 && n == 0) { if (t.lastIndexOf("A") == t.length() - 1) { t.deleteCharAt(t.lastIndexOf("A")); } else { t.deleteChar..

    Mysql DB 이중화 가이드 (With. docker)

    Mysql DB 이중화 가이드 (With. docker)

    회사 프로젝트에서 db 이중화가 필요해서 설정을 진행하게 되었다. 각종 시행착오를 겪으면서 나와 같은 고생을 하는 사람이 없도록 가이드를 작성하게 되었다. 1. Docker에 db 생성. 터미널에서 아래 명령어를 실행한다. docker pull mysql 정상적으로 실행이 됐다면 아래 상태를 확인한다. docker images 확인이 끝나면 컨테이너를 생성한다. 이중화를 하려면 db가 두개 필요하기 때문에 포트번호를 각각 다르게 두개를 생성한다. 임의로 3307,3308을 사용했다. docker run --name mysql-container1 -e MYSQL_ROOT_PASSWORD='지정할 비밀번호' -d -p 3307:3307 mysql:latest docker run --name mysql-con..