순열, 중복순열, 조합, 중복조합, 부분집합
2024. 6. 15. 20:46
Algorism/개념
package main;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.Arrays;public class CompleteSearch { private static int m = 3; private static int[] arr = {1, 3, 5, 7}; private static boolean[] select; private static int[] num; public static void main(String[] args) throws Exception { System.setIn(new FileInputStream("./input.txt")); ..

[백준] 1515번 : 수 이어 쓰기 - JAVA [자바]
2024. 6. 5. 15:05
Algorism/백준
https://www.acmicpc.net/problem/1515 문제 약간의 그리디 알고리즘을 가미한 구현문제이다. 입력으로 주어지는 수는 3000자리이고 0~9까지는 10개이다. 3000 * 10 = 30000 이내에서 2초동안 모두 찾을 수 있다. 입력값 290119으로 예시를 들겠다. 이 문자열의 문자마다 위치를 가르키는 index가 있다. 그리고 1 부터 시작하는 값 Num의 각자리수와 비교를 해준다. Num이 2일때를 생각해보자. 이때의 index는 0이다. 290119의 0의 인덱스 위치는 2이다. Num과 인덱스 위치의 값이 같기 때문에 index를 증가시킨다. (index = 1) 이후 Num이 9일때도 마찬가지로 index를 증가시킨다. (index = 2) 그다음 Num이 10일때는..

[백준] 21921번 : 블로그 - JAVA [자바]
2024. 6. 4. 16:33
Algorism/백준
https://www.acmicpc.net/problem/21921 문제 위 문제는 N이 250,000 이하의 값을 가지기 때문에 O(N*N) 형식의 완전탐색으로 푼다면 시간 초과가 걸릴 것이다.X의 기간은 항상 값을 유지하기 때문에 이를 슬라이딩 윈도우 아이디어로 풀면 되겠다는 생각을 했다. X의 값만큼의 윈도우를 설정하고 한칸씩 밀어버리는 방법이다.이렇게 푼다면 O(N)으로 풀 수 있다. 윈도우 범위와 인덱스의 위치등 값만 신경써서 해주면 된다. 전체 코드public class Main { public static void main(String[] args) throws Exception { System.setIn(new FileInputStream("./input.txt")); ..

[백준] 2512번 : 예산 - JAVA [자바]
2024. 6. 4. 15:40
Algorism/백준
https://www.acmicpc.net/problem/2512문제 위 문제는 단순하다. 하지만 N의 범위가 10,000일 경우에는 완전 탐색으로 풀었을 경우 1초가 넘어가게 된다. 그래서 완전탐색이 아닌 O(logn)으로 풀 수있는 이분탐색을 활용했다. 풀이는 O(nlogn)이다. 풀이는 아래와 같이 진행된다. 1. 입력값을 받는다.2. 이분탐색을 위한 배열 정렬을 오름차순으로 진행한다.3. left, right의 적절한 값을 넣어서 범위를 지정한다.4. 루프를 돌면서 중간값을 계산하고, 루프 내에서 배열을 완전 탐색해서 mid의 값이 넘어가면 총합에 mid를 더하고, 아니면 배열값 자체를 더한다.5. 구해진 총합을 M과 비교해서 적절하게 left, right를 조절한다.6. 루프가 끝나게 되면 ri..

Redis를 이용한 캐싱처리로 성능 끌어올리기
2024. 2. 16. 18:15
BackEnd
개요 https://bean-conding.tistory.com/22 시작하기에 앞서... 나는 학부시절 와글와글이라는 웹사이트를 만든적 있다. 이때 당시 코로나로 인해서 선후배간의 연결성이 떨어지는 문제점이 있었고, 이를 해소하고자 선후배를 매칭 시켜 채팅을 할 수 있게끔 bean-conding.tistory.com 윗글을 보시면 게시판 프로젝트를 통해 대용량 처리를 위한 성능 부분을 공부한다고 했었다. 시간이 꽤 지났지만... 꾸준히 커밋을 하며 기본틀인 게시판 프로젝트를 만들었고, 이제 Redis를 이용해서 캐싱을 적용해보고 성능 테스트를 해볼려고한다. 뼈대 프로젝트는 아래의 깃허브를 들어가보면 코드를 볼수 있다. https://github.com/wjddudqls96/bigTrafficBoardS..

시작하기에 앞서...
2024. 1. 9. 18:15
개인프로젝트/대용량 트레픽 처리가 가능한 게시판
나는 학부시절 와글와글이라는 웹사이트를 만든적 있다. 이때 당시 코로나로 인해서 선후배간의 연결성이 떨어지는 문제점이 있었고, 이를 해소하고자 선후배를 매칭 시켜 채팅을 할 수 있게끔 하는 서비스인 와글와글을 기획하게 되었다. 실제로 웹사이트를 개발후 우리 대학교에서 약 500명 이상이 가입을 해주었고, 이용해줬다. 생각 보다 호응이 좋았고, 이를 어플로 변환작업을 완료했다. 학교별 커뮤니티가 아닌 학과별 커뮤니티 요소들을 결합한 와글리를 기획 및 개발에 착수 했지만 팀원들의 현업으로 인해서 실패했다. TMI가 길어졌는데 어째든 운영을 해보면서 사용자가 특정 기능에 몰리면 서버가 아파하는 현상이 많이 발생되었고, 그때의 수준으로는 해결을 못했다. 그 이후 SSAFY 9기에 입과하여 총 3개의 프로젝트를 ..

[백준] 20040번 : 사이클 게임 - JAVA [자바]
2024. 1. 5. 11:59
Algorism/백준
https://www.acmicpc.net/problem/20040 20040번: 사이클 게임 사이클 게임은 두 명의 플레이어가 차례대로 돌아가며 진행하는 게임으로, 선 플레이어가 홀수 번째 차례를, 후 플레이어가 짝수 번째 차례를 진행한다. 게임 시작 시 0 부터 n − 1 까지 고유한 www.acmicpc.net 문제 이 문제는 유니온파인드로 풀 수 있다. 문제가 요구하는 것은 간단하다. 그래프(집합)을 형성할때, 만약 사이클이 발생한다면, 그 차례의 수를 출력하는 것이다. 생각을 해보자 사이클은 언제 발생 될까? 두개의 점을 그래프를 연결하기전에 이미 두개의 점들의 대표자가 같다면 싸이클이다. - 그림을 그려보면 쉽게 알 수 있다. 아래는 실제로 풀면서 내가 그린 그림이다. 이점을 이용해서 유니온파..

[백준] 1717번 : 집합의 표현 - JAVA [자바]
2024. 1. 5. 11:53
Algorism/백준
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net 문제 이 문제는 유니온파인드의 기초문제라고 할 수 있다. 유니온 파인드를 모른다?! 바로 아래 포스팅을 먼저 보고오자. https://bean-conding.tistory.com/19 알고리즘 - 유니온파인드, 서로소집합 (Unionfind) 서로소 집합에 대한 알고리즘인 유니온파인드를 계속 까먹고, 다른 포스트에서 보면 다양한 방식이 있어, 그때 그때 찾고 ..

알고리즘 - 유니온파인드, 서로소집합 (Unionfind)
2024. 1. 5. 11:47
Algorism/개념
서로소 집합에 대한 알고리즘인 유니온파인드를 계속 까먹고, 다른 포스트에서 보면 다양한 방식이 있어, 그때 그때 찾고 적용하면 햇갈릴 때가 많다. 그래서 내가 쓰는 알고리즘 형식을 메모하기 위해서 유니온파인드 알고리즘을 포스팅한다. 개념 서로소 또는 상호배타 집합들은 서로 중복 포함된 원소가 없는 집합들이다. 다시 말하자면 교집합이 없다는 뜻이다. 그리고 집합에 하나의 특정 멤버를 통해 각 집합들을 구분한다. 서로소 집합을 표현하는 방법은 다음과 같다. 연결 리스트 트리 그리고 서로소 집합 알고리즘을 적용하기 위해서는 다음과 같은 연산이 필요하다. Make-Set(x) : 자신이 대표자가 되어 집합을 만드는 함수. Find-Set(x) : 원소 x가 속해있는 집합에서 대표자가 누구인지 찾는 함수. Uni..

OS - 프로세스(Process)란?
2024. 1. 4. 20:05
CS/OS
프로세스(Process)란? 프로세스(Process)는 쉽게 말해서 실행중인 프로그램이다. 예를 들어 리그오브레전드 게임을 다운을 받으면 프로그램상태로 내 컴퓨터의 디스크에 저장이된다. 이를 실행하게 되면 메모리에 로드되게 되는데, 이때 프로세스가 되는 것이다. 즉 프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 또한 프로그램이 여러 프로세스가 될 수 있다. 프로세스 상태(Process State) 프로세스는 상태를 가지고 있고 상태가 계속 변한다. 프로세스 상태는 다음과 같다. new : 프로세스가 생성되기 전 상태(아직 프로세스가 아님) ready : 메모리에 Load되어 CPU 할당받을 준비가 되어있는 상태 running : CPU에 의해..