본문 바로가기

전체 글1068

[자바] 백준 24524 - 아름다운 문자열 (boj java) 문제 : boj24524 'S 에서의 순서대로 이어 붙여' 부분이 가장 중요하다. 예제 입력 2번처럼 순서가 안맞으면 카운팅을 하면 안된다. 그럼 이걸 어떻게 알 수 있을까? 이하의 말로 설명한 로직을 생각해보자. 1. s의 각 문자열의 문자(character)를 처음부터 순서대로 확인하면서.. 2. 각 문자가 t에 존재하는 문자가 아니라면 무시한다. 3. 현재 s에서 보고 있는 문자를 c라고 하자. t에서 c가 나온 위치 직전의 문자를 bf라고 하자. 예를들어 c가 'a'이고, t가 "bac"라면 bf는 'b'이다. 이제 여기가 중요하다. 현재까지 s에서 나온 각 문자의 횟수를 cnt[] 라고 하자. 즉 c가 현재까지 나온 횟수는 cnt[c]이다. 이 때, cnt[c] >= cnt[bf] 라면, 현재 .. 2022. 7. 24.
개발자 윈도우 세팅 (WSL 서브 리눅스, IntelliJ, vscode, git 등) 목차 0. 이 글의 목표 일반적으로 리눅스에서 IDE를 설치해 개발하기 보다는 윈도우 또는 맥 환경에서 많이 작업한다. 하지만 실제 프로젝트가 올라가는 서버는 리눅스 서버를 많이 사용한다. 또한 리눅스 시스템을 기반으로 만들어진 많은 시스템들이 있으므로 윈도우에서만 개발하기에는 한계가 있고 불편한 점들이 생긴다. 예를들어 윈도우에서만 돌려본 프로젝트가 실제 리눅스 환경에 올렸을 때 100% 정상 동작할지 보장할 수 없다. 이전에 이런 생각을 했었고, 주변 친구들과 인터넷의 여러 글들을 찾아보며 기본이 되는 윈도우 세팅을 구성해두었다. 처음엔 vmware에 맥을 설치해서 해보기도 하고, 리눅스를 가상으로 올려보기도 하고, WSL로 설치한 리눅스에 ubuntu용 intellij를 올린다음 GUI 환경이 없으.. 2022. 7. 24.
[자바] 백준 1682 - 돌리기 (boj java) 문제 : boj1682 내 경우 String을 기준으로 한 bfs로 풀었다. 우선 수열이 '1,2,3,4,5,6,7,8' 이라고 한다면 이걸 String으로 "12348765"로 변경한다. 즉 수열의 순서와 관계없이 그냥 내가 알아보기 편하게 배열에 나타나는 순서대로 String으로 만들었다. 어떻게 하든 상관은 없다. 마찬가지로 입력이 '6 4 2 8 1 3 5 7'일 경우 String으로는 "64287531"로 표현했다. 이런식으로 입력으로 들어온 값을 String으로 변환한걸 GOAL, 시작 수열을 String으로 변환한 "12348765"를 START라고 해보자. 그럼 이제 A, B, C, D의 4가지 변환 과정을 거쳐 START에서 GOAL로 최소 몇 번 만에 변환되는지 알 수 있으면 된다. 이.. 2022. 7. 23.
컴퓨터 새로삼! CPU나 램이 좀 아쉽지만 아무튼 인텔리제이 풀옵 가능할듯(?) 2022. 7. 22.
[자바] 백준 10504 - 덧셈 (boj java) 문제 : boj10504 24의 경우 7+8+9가 답이다. 대충 봐도 중간 특정 지점에서 시작되는 숫자에 대해, 몇 개의 합인지도 지정되지 않은 상태로 연속되는 양의 정수의 구간을 찾기란 어려워 보인다. 개인적으로 수학이 약해서 정말 어려웠다 ㅠ. 약간 생각을 바꿔서, 그럼 중간부터 시작되지 않고 항상 1부터 시작된다고 해보자. 즉, a까지의 합이라고 하면 1+2+...+a 가 N이라고 하면 어떨까? 이건 상대적으로 쉬워보인다. a는 최대 44720이니깐(44720x44721/2 = 999,961,560 이고, 문제에서 제시된 입력값의 최대치가 10^9 이므로 최대 44720 까지만 보면 된다.), O(44720)으로 찾을 수 있다. 그리고 a를 2부터 44720까지 증가시키면서 확인해보면 '만약 여러 .. 2022. 7. 22.
[자바] 백준 18114 - 블랙 프라이데이 (boj java) 문제 : boj18114 1. 한 개만 선택해서 C가 되는 경우 (코드 19~22line 참고) 이 경우는 간단하다. N개를 입력받으면서 해당 값이 C인 경우를 찾으면 된다. O(N) 2. 두 개를 선택해서 C가 되는 경우 (코드 24~31line 참고) 이 경우도 어렵지 않다. 미리 N개를 입력받으면서 배열에도 기록해두고, HashSet에도 기록을 해둔다고 해보자. 이후 배열을 순회하면서 현재 보고 있는 값이 A라고 할 때, HashSet에 C-A가 존재하는지만 확인해주면 된다. 주의점은 A != C-A 여야 한다(동일한 물건을 두 개 고르면 안되고, 모든 물건은 무게가 다르므로 A와 C-A가 동일할 수 없다). O(2N) 3. 세 개를 선택해서 C가 되는 경우 (코드 32~41line 참고) 이 경우.. 2022. 7. 21.
[코틀린, 자바] 백준 1094 - 막대기 (boj kotlin java) 문제 : boj1094 결국 64에서 시작해서 2씩 나눠가면서 나오는 64, 32, 16, 8, 4, 2, 1을 하나씩만 사용해서 숫자 X를 표현하는 문제이다. 눈썰미가 있다면 막대기로 바꿔서 표현했지만 결국 2진법 표현방식과 동일하다는 것을 알 수 있을 것이다. 즉, 이 문제는 X라는 10진수를 받아서 2진법으로 표현했을 때 비트가 1인게 몇개냐고 묻는 문제와 동일하다. 예를들어 23을 보자. 23을 2진법으로 표현하면, 23=16+4+2+1 이므로 다음과 같다. 23(10) = 0010111(2) 그럼 저 비트 1인 부분에 막대기가 하나씩 들어가주면 된다. 따라서 비트의 수를 세보면 4개이므로 4가 답이다. 이하 코드에서 자바의 경우엔 직접 비트를 세줬다. 그리고 코틀린으로는 Integer.bitCo.. 2022. 7. 20.
[자바] 백준 12100 - 2048 (Easy) (boj java) 문제 : boj12100 (상당히 귀찮은편인) 단순 시뮬레이션 문제이다. 최대 5번 이동이라고 했으므로, 처음 상태에서 상하좌우 4방향으로 움직이는걸 최대 5번 반복하면 된다. 즉, 최대 4^5번으로 모든 경우를 확인할 수 있다. 이 때 각 방향마다 NxN 칸의 모든 것들을 해당방향으로 움직여야 한다고 볼 수 있으므로 대략 O(N^2 x 4^5)의 시간복잡도가 된다. 그럼 남은건 상하좌우 방향으로 움직인다고 할 때, 문제에서 제시된 방법대로 동작만 되도록 시뮬레이션을 구현해주면 된다. 이 때 주의점은 예를들어 아래와 같은 경우를 보자. 2 0 0 2 0 0 2 0 0 위와 같은 경우 우측 방향으로 모두 이동시킨다고 했을 때, 우측으로 모두 붙어야 할 것이다. [A] 0 2 0 0 2 0 0 2 0 [B].. 2022. 7. 20.
쇼미더코드 2회차 금손 뱃지! (원티드 코딩테스트 대회) 1회차에선 은손이었는데 2회차에선 금손을 받았다. 굳! 2022. 7. 20.
[코틀린, 자바] 백준 2273 - 줄 서기 (boj kotlin java) 문제 : boj2273 1. 알아야 하는 것 총 5명이 있다고 가정하고 내 앞에 서야 한다고 확정된 학생이 2명이고, 내 뒤에 서야 한다고 확정된 학생이 1명이라고 해보자. 이 정보를 가지고 '각 학생이 설 수 있는 위치의 범위'를 알 수 있을까? 내 앞에 최소 2명은 있어야 하므로 난 무조건 3번째 자리 이상으로 서야 한다. 또한 내 뒤에 반드시 한 명은 있어야 하므로 4번째 이하의 자리에 서야만 한다(5-1=4). 따라서 '설 수 있는 위치의 범위'는 '3 4'가 된다. 즉, 자신의 앞이라고 확정된 인원이 X명, 자신의 뒤라고 확정된 인원이 Y명, 총 N명이라면 범위는 'X+1 N-Y'가 됨을 알 수 있다. 그럼 다음의 경우를 생각해보자. 3 2 1 2 2 3 위의 경우 3의 앞에 2가 서고, 2의 .. 2022. 7. 19.