jihogrammer의 등록된 링크

 jihogrammer로 등록된 네이버 블로그 포스트 수는 115건입니다.

[백준 17244] 아맞다우산 - Java [내부링크]

이 문서는 [BOJ 17244 아맞다우산] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #17244 #아맞다우산 #Java #Graph #BFS #너비우선탐색 #BitwiseOperation #비트연산 #Bitmask #비트마스크 #비트마스킹 #Debug #Debugging #디버그 #디버깅 별 거 아니네 싶었는데, 달이 차오른다, 가자. 문제가 떠오르는 문제였다. 주어지는 물건의 위치를 단순하게 'X'로 바라볼 게 아니라, 각각 다른 물건으로 취급하고 접근해야 한다. 나의 경우, 물건이 최대 5개까지 있기 때문에 소문자 a~e로 변경하여 맵에 저장시켰다. 그렇게 저장할 경우 챙긴 물건의 부분집합 형태는 다음과 같다. 챙기냐 안 챙기냐로 접근하여 생각하면 총 32비트의 state로.......

[백준 1916] 최소비용 구하기 - Java [내부링크]

이 문서는 [BOJ 1019 최소비용 구하기] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #1916 #최소비용구하기 #Java #Graph #Dijkstra #다익스트라 #AdjacencyList #AdjacencyMatrix #인접리스트 #인접행렬 #ArrayList #Heap #PriorityQueue 음, 아주 열심히 푼 문제다. 일단 풀이부터 나열하자면 다음과 같다. 1. Adjacency List + PriorityQueue 2. My ArrayList + PriorityQueue 3. My ArrayList + My Heap 4. Adjacency Matrix 성능은 위와 같다. 문제 접근 시 주의할 점은 A to B의 경로가 여러 개 주어질 수 있다는 점인데, 사실 이 주의점은 인접행렬 방식일 때만 신경쓰면 될 것 같다. 다익스트라 대표격인 문제 중 하나라고 생각한다. 입.......

[백준 1261] 알고스팟 - Java [내부링크]

이 문서는 [BOJ 1261 알고스팟] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #1261 #알고스팟 #Java #Graph #BFS #너비우선탐색 #Dijkstra #다익스트라 #BitwiseOperation #비트연산 #Heap #PriorityQueue Dijkstra, 0-1 BFS 문제 그러나 0-1 BFS로 풀지 않았다. Dijkstra답게 풀었다. PriorityQueue에 우선순위를 다음과 같이 주고 다익스트라처럼 풀었다. 1. 벽을 부순 횟수(w) - 오름차순 2. (x, y) - 내림차순 2번의 경우 도착점이 (N, M)으로 고정되어 있기 때문에 도착점에 가까운 정점을 먼저 방문하게 처리했다. 0-1 BFS를 사실 아직 잘 모른다. Queue를 2개 쓰거나, Deque을 사용한다는 것만 안다. 점점 Deque을 쓸 일이 많아지는 것 같.......

[Binary Visited] 이진 방문 배열 [내부링크]

#BinaryVisited #Binary #visited #check #BitswiseOperation #Graph 예전에 한 번 정리한 것 같은데, 게시글이 뭔지 확인이 안 된다. 아닌가, 하려다가 미뤘던 것 같기도 하다. 알고리즘 문제 풀이 시 방문 배열을 사용하는 경우가 많다. 한 번 방문한 정점에 다시 방문하지 않기 위해 사용하는데, 보통 boolean 타입 n차원 배열로 생성해서 사용한다. 그러나 성능향상을 위해 비트 연산으로 boolean 배열을 int나 long으로 변경할 수 있다. int형은 최대 크기 32bit, long형은 최대 크기 64bit이므로 주어진 문제의 범위를 보고 적절하게 사용해왔다. N의 크기가 64가 넘을 경우 어쩔 수 없이 항상 boolean 배열을 사용했는데, 이를 int형으로.......

[백준 11403] 경로 찾기 - Java [내부링크]

이 문서는 [BOJ 11403 경로 찾기] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #11403 #경로찾기 #Java #Graph #FloydWarshall #플로이드워셜 #Dijkstra #다익스트라 #Queue #BinaryVisited #BitwiseOperation #비트연산 아주 빡시게 풀었다. 이제 어느 정도 Dijkstra와 Floyd-Warshall 알고리즘이 뇌에 주름잡고 있는 듯하다. 검색해서 찾아보지 않아도 구현이 된다...! 크게 두 가지 방법으로 풀었다. 앞서 나온 것처럼 Dijkstra와 Floyd-Warshall 알고리즘을 적용하여 해결했다. 자세하게는 BinaryVisited, MyArrayList, MyQueue를 활용하여 접근했다. BinaryVisited는 다음 링크에서 한 번 정리했다. 더 나아가 개선점을 발견하여 적용했다.......

[백준 11404] 플로이드 - Java [내부링크]

이 문서는 [BOJ 11404 플로이드] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #11404 #플로이드 #Java #Graph #FloydWarshall #플로이드워셜 #Dijkstra #다익스트라 #BitwiseOperation #비트연산 제목에 걸맞게 Floyd-Warshall 알고리즘으로 푸는 문제다. 플로이드에서는 기본 중의 기본인 문제라고 볼 수 있다. 거리 비용이 자연수라는 조건이 있기 때문에 Dijkstra 알고리즘 적용이 가능하다. 그러나 Dijkstra보다 Floyd로 푸는 게 더 빠른 문제다. 원인으로는 다음과 같다. a. 아마도 input이 희소그래프로 주어지지 않는 듯하다. b. A to B의 경로가 여러 개 주어질 수 있다. 이 경우 ArrayList로 만든 graph의 경우 무의미한 반복을 초래한.......

[백준 1389] 케빈 베이컨의 6단계 법칙 - Java [내부링크]

이 문서는 [BOJ 1389 케빈 베이컨의 6단계 법칙] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #1389 #케빈베이컨의6단계법칙 #Java #Graph #FloydWarshall #플로이드워셜 Floyd-Warshall 연습. 내일은 다익스트라와 플로이드워셜 알고리즘 정리를 해야 한다. 이렇게 유사한 주제로 매일 한 문제씩 푸는 거 좋은 것 같다! 오늘은 다소 부실하게 풀었다. 다익스트라로도 풀어봐야 하는데, 시간이 부족했다. 내일 정리하면서 시간이 나면 다익스트라로 풀던가 해야지. 사실 이 문제 푸느라 시간을 많이 뺐겼고, 틀렸다. 답을 모르겠다. 내일 다시 해야지. 유명한 n다리 건너면 전 세계 사람들을 다 알 수 있다는 법칙인 것 같다. 딱 풀기 시작한 지.......

블로그 이전 [내부링크]

네이버도 좋았지만, 티스토리로 넘어갑니다. 더 열심히 작성하겠습니다.

[백준 17086] 아기 상어 2 - Java [내부링크]

이 문서는 [BOJ 17086 아기 상어 2] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #17086 #아기상어2 #Java #Graph #BFS #너비우선탐색 #BitwiseOperation #비트연산 #상어가족 #상어 체감상 역시 DFS 보다 BFS가 수월하다. DP랑 섞인 DFS를 생각하면 끔찍하지만, 생각해보니까 다익스트라가 섞인 BFS도 만만치 않네. 오랜만에 상어 문제를 풀었다. 마법을 부리는 상어 문제들도 얼른 풀어야 하는데, 간단하게 아기 상어부터 시동을 걸었다. 처음에 잘못 접근해서 풀긴 풀었지만, 다시 정리해서 깔끔하게 풀었다. 1. BFS 수행 전에 아기 상어의 위치를 Queue에 담아둔다. 2. Depth를 체크하며 Queue가 빌 때까지 BFS를 수행한다. 3. Depth가 답이.......

[백준 2178] 미로 탐색 - Java [내부링크]

이 문서는 [BOJ 2178 미로 탐색] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #2178 #미로탐색 #Java #Graph #BFS #너비우선탐색 #BitwiseOperation #비트연산 미로 탐색 문제 기본적인 BFS문제이다. 탈출 불가능한 경우는 제외하기 때문에 BFS로 탐색하고, 도착한 순간의 이동 거리가 정답이 된다. 시작점도 (0, 0)으로 고정되어 있는 단순한 문제다. 미로의 방문 기록을 visitied 배열로 관리할 필요가 없었다. 왜냐하면 어차피 한 번 도착하면 끝이기 때문에, 원본 maze 배열 자체의 값을 방문했을 경우 false에서 true로 갱신했다. maze, queue 객체(배열) 외에는 따로 생성할 필요가 없다. 단순한 문제이더라도 최선을 다해 풀었다. 2개의.......

[백준 2606] 바이러스 - Java [내부링크]

이 문서는 [BOJ 2606 바이러스] 문제를 바탕으로 작성되었습니다. #BOJ #백준 #2606 #바이러스 #Java #Graph #DFS #깊이우선탐색 #Stack #스택 #AdjacencyList #AdjacencyMatrix 크게 3가지 방식으로 풀었고, 마지막으로 3가지 방식을 섞어서 빠른 속도의 코드를 구현했다. Stack으로 구현하는 게 어려울 줄 알았지만, 생각보다 수월했다. 그래도 왜 재귀방식으로 DFS를 구현하는지 깨달았다. 구현의 편의성에서 재귀방식이 훨씬 편한 것 같다. 하지만, 재귀방식은 무분별한 전역변수의 사용과 반환값 조절의 어려움이 있다. DFS를 Stack으로 구현할 경우 위의 단점을 비교적 쉽게 극복할 수 있을 것으로 보인다. 또한 크기를 제대로 파악하고 있.......

[백준 17471] 게리맨더링 - Java [내부링크]

이 문서는 [BOJ 17471 게리맨더링]을 바탕으로 작성되었습니다. DFS(실패 - 시간초과) → 인접리스트...

[K-MOOC] CA - Integer Arithmetic(×, Multiplication) [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조]를 바탕으로 작성되었습니다. N자리의 비트를 가진 두 수를 곱하게 ...

[K-MOOC] CA - BFPN Representation [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조]를 바탕으로 작성되었습니다. 참고 1. 부동소수점 연산. 단정밀도와 ...

[SWEA 1953] 탈주범 검거 - Java [내부링크]

이 문서는 [SWEA 1953 탈주범 검거]를 바탕으로 작성되었습니다. 할 수 있는 편법을 모두 적용했다. 10...

[Java] System.in.read() - 3 [내부링크]

다시 작성하지 않을라 했는데, 심심해서 작성한다. 알고리즘 문제 풀 때 최적화된 형태를 정리한다. 보통 ...

[SWEA 5607] [Professional] 조합 - Java [내부링크]

이 문서는 [SWEA 5607 조합]을 바탕으로 작성되었습니다. 요상한 걸 배웠다. 페르마의 소정리 조합론, ...

[CT] 페르마의 소정리 [내부링크]

조합의 결과에 MOD 연산을 취한 값을 알아낼 때 사용하는 개념 MOD를 사용하지 않을 때는 당연히 저 ...

[K-MOOC] CA - BFPN Arithmetic [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조]를 바탕으로 작성되었습니다. 부동소수점에서 논리연산을 고려할 필요...

[백준 11054] 가장 긴 바이토닉 부분 수열 - Java [내부링크]

이 문서는 [BOJ 11054 가장 긴 바이토닉 부분 수열]을 바탕으로 작성되었습니다. 요즘 문제를 엄청 풀어...

[SWEA 5643] [Professional] 키 순서 [내부링크]

이 문서는 [SWEA 5643 Professional 키 순서]를 바탕으로 작성되었습니다. 생소한 문제였다. 그래프로...

[백준 1194] 달이 차오른다, 가자. - Java [내부링크]

이 문서는 [BOJ 1194 달이 차오른다, 가자.]를 바탕으로 작성되었습니다. 미로탐색, BFS, 비트마스킹...

[K-MOOC] CA - CPU의 기본구조 및 구성요소 [내부링크]

Register Set는 CPU 내부에 위치하므로 액세스 속도 및 처리 속도가 가장 빠르다. CPU 내부에 있기...

[K-MOOC] CA - 명령어 세트 [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조] 강의를 바탕으로 작성되었습니다. 명령어의 종류와 수에 따라 CPU...

[K-MOOC] CA - 명령어 주소지정 방식 [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조] 강의를 바탕으로 작성되었습니다. 한정된 비트 내에서 모든 메모리 ...

[Spring] 시작 [내부링크]

Spring을 배우고 있다. 확실히 맨땅에 헤딩하는 것보다는 훨씬 괜찮다. 기본적으로 숙지해야 할 내용들을 ...

[Spring] Container, Bean [내부링크]

참고한 항목들 spring-5.2.6.RELEASE-docs/spring-framework-reference/core.html Spring은 Enter...

[MVC Project] BulletinBoard - 1 [내부링크]

프로젝트 생성 Git 연동 0. git 설치 1. 아무 터미널을 연다. 2. Git Project로 변경 3. Github Repos...

[Spring] IoC, DI [내부링크]

출처: spring-5.2.6.RELEASE-docs/spring-framework-reference/core.html Release 내용 원문 This...

[MVC Project] BulletinBoard - 2 [내부링크]

Database Design 1. DB 구축 2. MySQL Connection 생성 3. Query 실행 4. ERD 4. SCHEM...

0501 [내부링크]

네이버 블로그 2주 동안 일기를 매일 쓰면 16,000원을 준다. 겸사 겸사 게시글도 써야지. 오랜만에 정말 푹...

[K-MOOC] CA - 명령어 사이클 및 인출 사이클 [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조] 강의를 바탕으로 작성되었습니다. 위 그림은 전체 컴퓨터가 처리하는...

0502 [내부링크]

#오늘일기 #블챌 오늘은 스벅에 자리가 없어서 할리스로 갔다. 늦잠 자서 아침을 늦게 먹고 할리스에서 점...

0503 [내부링크]

#오늘일기 #블챌 오늘은 SSAFY에서 알고리즘 2문제와 컴퓨팅사고력 3문제로 평가를 치뤘다. 알고리즘 ...

[MVC Project] BulletinBoard - 3 [내부링크]

maven은 어느 정도 익숙해져서 gradle을 시도하려 했으나, 시간이 너무 많이 뺐기는 것 같아 일단 밑바닥부...

0504 [내부링크]

#오늘일기 #블챌 네이버 이벤트가 갑작스레 종료되었다. 악성으로 여러 계정으로 어뷰징 상황이 발생한다는...

[K-MOOC] CA - 명령어 종류 및 실행 사이클 [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조] 강의를 바탕으로 작성되었습니다. 명령어 LOAD STORE AD...

[K-MOOC] CA - 간접 사이클 및 종합실행 예제 [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조] 강의를 바탕으로 작성되었습니다. 간접 사이클(Indirect Cycle) 종...

[PGMS 72413] 합승 택시 요금 - Java [내부링크]

이 문서는 [프로그래머스::합승 택시 요금] 문제를 바탕으로 작성되었습니다. #프로그래머스 #Programmers...

0505 [내부링크]

#오늘일기 오늘은 어린이날. 4월달에 휴일이 하루도 없던 걸 생각하면, 오늘은 정말 꿀같은 휴일이었다. 그...

[PGMS 72412] 순위 검색 [내부링크]

이 문서는 [프로그래머스::순위 검색] 문제를 바탕으로 작성되었습니다. #프로그래머스 #Programmers #Ja...

[백준 19237] 어른 상어 - Java [내부링크]

이 문서는 [BOJ 19237 어른상어]를 바탕으로 작성되었습니다.엄,,, 상어 싫다. Simulation 트리오를 이 문제로 마무리 해도 되지 않을까 싶다...아기 상어, 청소년 상어, 어른 상어 시리즈를 마무리했다.낚시왕은 번외편인 것 같고, 아기 상어 2도 남았지만 나중에 풀기로 한다.푼 순서는 청소년 상어 → 아기 상어 → 어른 상어 순으로 풀었는데,체감상 자라는 순으로 푸는 게 맞는 것 같다.각설하고 문제 리뷰를 하자...사실 뭔가 구현해내긴 했지만, 따져할 부분들이 너무 많아서 뭔가 자세한 설명을 하기는 힘들다.특정 시점에 냄새를 뿌리느냐 아니냐로 틀릴 수도 있어서, 약간 까다로웠다.구현은 2가지 방식으로 했다. 하나는 순한맛, .......

[SWEA 1249] 보급로 - Java [내부링크]

이 문서는 [SWEA 1249 보급로]를 바탕으로 작성되었습니다.오랜만에 SWEA 문제를 풀었다.아, 사실 잘 모르겠다.대표적인 풀이가 3~4개 되는 다양한 풀이법이 존재하는 문제다.BFS, PQ-BFS, Dijkstra, DFS, Brute Force 등이 있다고 하는데,일단 비교적 접근하기 쉬운 BFS로 선택하고 풀었다.처음에는 단순 DP 문제인 줄 알았으나 전혀 아니었다.물론 단순 BFS 풀이도 DP를 적절하게 섞어서 사용하나,Dijkstra에 더 가깝다고 할 수 있다.즉, Dijkstra에 대한 이해가 부족한 상태라 그냥 정리하는 수준으로 작성한다.본격 알고리즘 주가 2주 동안 이어질 텐데 걱정이다...DP에 대한 예외부터 보자.이 예제를 DP로 접근하여 풀 경우 답은 1이.......

[K-MOOC] CA - Integer Arithmetic(+/-) [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조]를 바탕으로 작성되었습니다.Half AdderA, B 두 수를 더할 때 이진법의 각 자리를 더한다.그 때 1 + 1을 수행하게 될 경우 Cout(carry out, 올림)가 발생하게 된다.더한 결과를 보게 되면 S는 A와 B의 XOR연산을 한 결과와 동일하고,올림 결과를 보게 되면 C는 A와 B의 AND연산을 한 결과와 동일함을 알 수 있다.이를 하드웨어(논리회로)로 만들면 HA라고 한다.하지만 여기까지는 완전한 구현이 되지 못한다.그럼 Full Adder를 살펴보자. 표를 보면 직관적으로 알기 어렵다.논리식과 회로의 모습이 다소 복잡해지기 시작하지만, 나중에 다시 다룬다고 한다.A와 B를 더한다고 했을 때 Cin은 올려진 수를 의미 한.......

[Git] branch 이름 변경 [내부링크]

SSAFY Gitlab은 기본 branch 명이 master이고, Github의 기본 branch 명은 main이다.Git 자체의 기본 branch 명은 master이다.그래서 아무 생각 없이 github branch를 master로 수행했는데,github에서는 master를 기타 branch로 취급하는 것 같았다.그래서 branch 이름을 바꿔주어야 함을 알고 바꿔주었다.바꾸는 방법은 다음과 같다.이제 단순 푸시를 하면 다음과 같은 안내가 출력된다.단순한 오류인데, 요약하자면 다음과 같다."branch가 어떤 repo를 가리키고 있는지 모르겠다."따라서 git 안내에 나온대로 명령어를 입력하면 되고,remote를 명시적으로 옵션에 달아줘도 된다.참고 - Git Book

[BIT] 이진수 문자열 → 10진수 정수 [내부링크]

bitmask로 문제 풀이 시비트는 알겠는데 숫자를 모르겠고 계산하기 귀찮을 때 긁어서 사용할 코드 저장IntegerLong

[백준 1753] 최단경로 - Java [내부링크]

이 문서는 [BOJ 1753 최단경로]를 바탕으로 작성되었습니다.왜 빠른지 모르겠는 코드짜놓고도 어라 이게 왜? 싶었다.그래프를 구현할 때 웬만하면 List방식으로 구현하려고 한다.분명 다른 분들도 그러셨을 텐데, 굳이 차이점이라고 하자면ArrayList 배열이 아니라 ArrayList<ArrayList<Node>> 방식으로 구현했다는 정도다.대표적인 다익스트라 풀이 문제 중 하나잊을 때쯤 다시 와서 복습하자.요즘 SSAFY에서 미친듯이 진도를 나가고 있다.MVC 패턴 배운지 얼마 되지도 않았는데, 프로젝트를 시킨다.너무하다 진심으로...그래서 사실 이건 예전에 풀었던 문제를 들고 왔다.지금 보면 흐음 싶다.복습이 필수적인 문제라고 생각.......

[백준 7569] 토마토 - Java [내부링크]

이 문서는 [BOJ 7569 토마토]를 바탕으로 작성되었습니다.BFS 3차원, Depth Check일반적인 BFS 문제에 3차원으로 접근하는 문제Queue에 한 번에 3개의 정보(토마토의 좌표)를 담아야 하지만,그 데이터형이 동일하기 때문에 순서를 지키면서offer(), poll()을 사용하게 되면 별도의 배열이나 클래스를 만들지 않고순서대로 3개의 값을 넣고 빼면 하나의 Queue로도 충분히 구현 가능하다.차원의 수는 비교적 문제가 단순하기 때문에 문제된다고 생각하지 않는다.다만, 비어있는 칸으로 둘러쌓인 덜 익은 토마토가 있을 경우며칠이 지나도 토마토가 익지 않기 때문에입력값을 읽을 때 미리 덜 익은 토마토의 수를 세 두어야 한다.BFS를 Depth별.......

[BackEnd] 아무거나 [내부링크]

Model 1MVC 구분 없이 정적인 페이지 구성비교적 간단한 BL이 사용되는 경우나 일시적으로 필요한 경우에 사용하는 웹서비스 개발 방식JSP에서 모든 걸 처리MVC Model(Model 2)Model - Service, DAO, Java BeansBL, DBL 처리 controller에 의해 조절됨View - JSPJSP에서는 최대한 화면에 대한 처리만 수행하고,기타 복잡한 로직은 Model에서 처리돼서 받아온 걸 사용Controller - ServletClient의 요청을 받고 각 행위에 대한 처리를 담당하는 Service 등으로 보내 처리하게 시킴간단한 페이지 이동 또한 수행. redirect 및 foward 담당JSTL; JavaServer Pages Standard Tag Library자바서버 페이지 표준 태그 라이브러리prefixcore - c .......

[백준 1956] 운동 - Java [내부링크]

이 문서는 [BOJ 1956 운동]을 바탕으로 작성되었습니다.Floyd Warshall시작 정점에서 출발하여 도착 정점이 다시 자기 자신으로 오는 방법의 최단 거리 구하기즉, 비용이 제일 적은 Cycle을 찾는 문제다.기본적인 그래프를 구현하는데,이 문제는 인접리스트 방식보다 인접행렬 방식으로 그래프를 구현하는 것이 유리한 듯 하다.사실 인접리스트로 플로이드-워셜 알고리즘을 구현하는 방법을 모르지만,PriorityQueue로 구현한 Dijkstra를 N번 적용한 방식보다 2배 이상 빨랐다.(어차피 가중치가 자연수라는 조건이 있었기 때문에 시도해봤다. 하단 참고)모든 경우의 수를 찾는 방식은 동일하지만,DP를 기반으로 고안된 Floyd-Warshall 방.......

[백준 1167] 트리의 지름 - Java [내부링크]

이 문서는 [BOJ 1167 트리의 지름]을 바탕으로 작성되었습니다.Tree Diameter - Double BFS처음에 DFS로 일일이 접근해서 풀어냈는데 시간초과가 발생했다.Leaf Node를 잡고 걔네들로만 DFS로 돌리면 빠르겠지 했는데,어림도 없었다.이 문제는 애당초 풀이법이 정해져 있다고 볼 수 있다.다른 방식으로는 시간 내에 풀 수 없을 것이다.근간이 되는 개념으로는 우선 Tree의 Level(Depth)를 구해낼 줄 알아야 한다.Root Node가 주어져 있지 않은 Graph의 형태로 입력값이 주어진다.따라서 아무 정점을 Root로 잡고 그 때의 Leaf Node를 찾고,다시 그 Leaf Node를 Root로 했을 때 나오는 Leaf Node까지의 거리가 정답이다.쉽게 말하면 BFS를.......

[MySQL] Error Code: 1175, 1093 [내부링크]

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.참고 사이트It looks like your MySql session has the safe-updates option set. This means that you can't update or delete records without specifying a key (ex. primary key) in the where clause.파파고 번역 결과SSAFY 실습하는데, UPDATE 구문이 자꾸 제대로 작동되지 않았다.발생한 에러코드를 구글에 검색했는데, 다양한 해결책이 있었다.1. MySQL Workbench 옵션 변경2. SAFE MODE 끄기 (본질적으로 1.......

[K-MOOC] CA - ALU Architecture과 Representation [내부링크]

이 문서는 [K-MOOC 컴퓨터구조]를 바탕으로 작성되었습니다.2주차학습목표* ALU에 대한 구조를 이해하고 ALU에서 처리되는 정수형 상수에 대한 표현법을 이해할 수 있다.* 논리 연산에 대한 처리 방법을 설명할 수 있다.* 정수형 상수의 덧셈기 및 뺄셈기에 대해 공부함으로써 ALU에 대한 기초를 확립할 수 있다.학습내용* ALU Architecture* Integer Representation* Logic Operations* Integer Arithmetic(+/-)* Quiz, PBL, 탐구주제아마 ALU = AU + LU를 의미하는 듯* AU; Arithmetic Unit - 기본적인 사칙연산* LU; Logical Unit - 논리연산아직까지는 쉽다.MSB; Most Significant Bit - 최상위 비트(부호비트). 0 이면 양수 1이면.......

[백준 2529] 부등호 - Java [내부링크]

이 문서는 [BOJ 2529 부등호]를 바탕으로 작성되었습니다.DFS부등호를 순서대로 사용하고, 전부 다 사용했을 때 최대값과 최소값을 비교 갱신한다.완전탐색으로 분류되어 있다지만,최대 최소를 구하기 때문에 완전하게 탐색하지는 않고 메소드를 종료시키는 사람도 봤다.하나 더 생각해야 하는 게 있다.최대값이 될 수 있는 수가 9876543210으로 int 정수형 범위를 벗어난다.그래서 처음에는 long으로 풀어냈는데, StringBuilder로 풀어내는 사람을 보고 따라 풀어봤다.BFS로도 풀어보려고 시도했으나, 뭔가 방문처리가 까다로워져서 도중에 접었다.물론 BFS가 DFS보다 더 효율적이라고 생각하지는 않는다.왜냐하면 BFS는 가지치기를 하.......

[K-MOOC] CA - Logic Operations [내부링크]

이 문서는 [K-MOOC 컴퓨터 구조]를 바탕으로 작성되었습니다.A, B; OperandMUX; MultiplexorS; SelectMUX가 4개의 논리 연산 중 하나를 출력하게 되는데, 4개를 고르게 결정하는 게 S이다.S1, S2의 비트에 따라 00이면 OR, 01이면 AND, 10이면 XOR, 11이면 NOT.각 연산의 결과가 F(출력)로 넘어간다.위 그림에서 아래 쪽은 각 Logic Module이 병렬로 연결되어 있다.따라서 동시에 여러 비트의 결과를 뽑아낼 수 있도록 설계한다.OR Gate는 한쪽 비트를 시켜두게 되면 원하는 작업을 수행할 수 있다.위 그림이 잘못되어 있는데, 한 쪽을 1 또는 0으로 고정시켰을 때를 생각하자.한쪽 Operand를 1로 고정시키면 무조건 결과를 1로 뽑아낼 수 있.......

[백준 2667] 단지번호붙이기 - Java [내부링크]

이 문서는 [BOJ 2667 단지번호붙이기]를 바탕으로 작성되었습니다.오늘은 SSAFY 온라인 회식 중...N의 크기가 최대 25이기 때문에 그냥 비트마스킹으로 방문배열을 처리했다.DFS, BFS 두 방식으로 풀어냈다. 뭔가 DFS가 더 편하긴 하다.DFSBFS메인 부분은 비슷하고, BFS의 Queue는 배열로 구현했다.

[백준 1260] DFS와 BFS - Java [내부링크]

이 문서는 Baekjoon Online Judge의 [1260번: DFS와 BFS]를 바탕으로 작성되었습니다.DFS와 BFS를 연습하는 대표적인 문제.하지만, Graph(이하 G)에 대한 개념을 바탕으로 풀어야 하기 때문에Graph 또한 구현해야 풀 수 있다.Graph아무래도 정점(Vertex, 이하 V)의 수보다 간선(Edge, 이하 E)의 수가현저하게 적을 가능성이 더 커 보이기 때문에인접리스트(Adjacency List, 이하 A) 방식으로 구현했다.물론 TC에 따라 다를 수 있겠지만, 그냥 List 방식으로 한다.G가 단순하게 숫자를 V로 가지기 때문에각 A를 ArrayList<Integer>로 사용했다.또한, 입력이 단순한 형태로 제공되기 때문에가중치에 대한 고려 없이 양방향으로 V를 연.......

[백준 2108] 통계학 - Java [내부링크]

이 문서는 Baekjoon Online Judge의 [1260번: DFS와 BFS]를 바탕으로 작성되었습니다.예전에 풀다가 틀린 이유를 모르겠어서 당황했던 문제였는데,아니나 다를까 오늘은 시간초과가 떠서 더 당황했다.겉보기와 달리 신경 써줘야 할 게 많은 문제였다.주의할 점은 다음과 같다.1. N은 항상 홀수로 주어진다.2. 시간초과가 나지 않게 불필요한 for문을 제거한다.3. 입력 시 동시에 처리할 것들을 수행한다.4. 빡시게 구현한다.예전에 작성했던 코드가 웬만해서는 갱생 불가할 것 같아 갈아엎고 새로 작성했다.비슷하게 작성했다가, 이제 됐다 싶었는데 시간초과가 발생했다.그냥 엎을까 싶었으나, 차분하게 구글링과 질문게시판을 활용했.......

[백준 2636] 치즈 - Java [내부링크]

이 문서는 [BOJ 2636 치즈]를 바탕으로 작성되었습니다.DP 연습하다가 왜 갑자기 BFS로 넘어오는지는 모르겠지만, 일단 재밌게 풀었다.구멍난 걸 어떻게 처리하나 싶었는데,"주어진 map의 가장자리는 항상 비어있다"는 조건으로 인해단순하게는 (0, 0)부터 넣고 BFS를 돌리면 된다.그렇게 구현했을 경우 치즈에 있는 구멍을 신경쓰지 않아도 된다.하지만 한 시간이 지날 때마다 테두리에 있는 치즈가 녹으므로(0, 0) → (1, 1) → (2,2) → ... 처럼 BFS를 수행할 초기 좌표를 조절하여 시간단축을 꾀했다.동일한 BFS방식으로 치즈를 녹이는 것과 방문하는 것을 동시에 처리한 코드도 봤는데,뭔가 더 어렵고 복잡해 보여서 한.......

[백준 1600] 말이 되고픈 원숭이 - Java [내부링크]

이 문서는 [BOJ 1600 말이 되고픈 원숭이]를 바탕으로 작성되었습니다.재밌긴 했다만, 조금 지겨웠다. 이유는 다음과 같다.Queue에 배열을 넣으면 메모리 초과, 클래스로 넣으면 통과된다.정확한 원리는 모르겠다. 아무튼 짜증났다.풀어내고 다른 분들의 풀이를 구경해보니 Monkey 클래스의 데이터를 4개에서 3개로 줄일 수 있었다.방법은 BFS의 구현 방법 중 Depth를 체크하면서 돌리는 방법이다.문제의 정답은 무조건 일찍 도착하는 게 정답이 되므로, Depth를 체크하게 되면 메모리를 많이 절약할 수 있다.조건을 만족할 시 해당 Depth가 원숭이가 이동한 시간(?)이 되므로 바로 결과로 넘겨주면 된다.널려져 있는 풀이에는 visited를 3차.......

[백준 2565] 전깃줄 - Java [내부링크]

이 문서는 [BOJ 2565 전깃줄]을 바탕으로 작성되었습니다.DP + LIS + (정렬) + (이진탐색)DP와 LIS에 대한 개념이 잡혀 있어야 풀 수 있는 문제정렬이나 이진탐색이 익숙하지 않더라도 풀 수 있지만, 이미 DP와 LIS를 학습했다면 사용하지 않을 이유가 없다.맨 아래에 최적 코드가 있다.DP와 LIS는 세트이므로 한 번에 묶어서 설명해야 하지만 설명할 자신이 없다. 처음 배웠다.백지에서 시작한 게 아니고 SSAFY 수업 들으면서 따라한 수준이라 어떻게 적어야 할지 망설여진다.이진탐색을 안 쓴다는 가정하에 설명하자면 다음과 같다.또한, TC에서 전깃줄의 연결 지점들이 뒤죽박죽 되어 있으므로 DP를 사용하기 위해서는 정렬이 선행되.......

[백준 9205] 맥주 마시면서 걸어가기 - Java [내부링크]

이 문서는 [BOJ 9205 맥주 마시면서 걸어가기]를 바탕으로 작성되었습니다.FloydWarshall, DP, Graph, BFSFloyd Warshall(경출도,,,) 기법을 배웠다고 하나 이 문제에 당장 써먹지를 못할 것 같아서 그냥 BFS로 풀었다.시작점(이하 S)부터 모든 편의점(이하 V)을 비교하며 도착점(E)까지 너비우선탐색(BFS)를 수행한다.현재 접근한 정점(S 또는 V)에서 떨어진 맨해튼 거리를 측정하고 가능하면 Queue에 넣는 방식이다.맨해튼 거리 측정 시, 일반적인 식은 다음과 같다.기본 Math 클래스에도 abs() 메소드가 존재하지만, ~ 연산자를 사용해서도 구할 수 있다.위와 같이 1의 보수가 되므로 x1-x2가 음수이면,1의 보수를 취하고 1을 더해주면.......

[백준 16236] 아기 상어 - Java [내부링크]

이 문서는 [BOJ 16236 아기상어]를 바탕으로 작성되었습니다.BFS, 시뮬레이션, 청소년 상어 연관문제구현에 무진장 신경을 많이 쓴 문제다.1. 방문 배열을 비트마스킹 기법으로 구현2. Queue를 배열로 사용3. 정수 하나를 좌표로 사용하기4. NON-API엄청 엄청 빠를 줄 알았는데, 로직 자체에 불필요한 연산이 섞여 있어 그냥 조금 빨랐다.불필요한 연산은 아기 상어가 먹을 수 있는 후보들을 배열에 일일이 저장하고 따로 메소드로 빼서 타겟을 정했다.하지만 그냥 BFS 상에서 변수 두 개로 구현할 수 있었다. 나중에 다시 시도하겠다만, 우선 게시글을 작성한다.허탈감이 컸지만, 생각한 대로 구현이 됐다는 점에서 만족스럽다.1, 3번은.......

[백준 17143] 낚시왕 - Java [내부링크]

이 문서는 [BOJ 17143 낚시왕]을 바탕으로 작성되었습니다.골드 2 / Simulation상어가 싫어졌다.지들끼리 동족상잔을 벌이는 상어떼가 있다.위아래 또는 좌우로만 왔다갔다 움직이는데 각각을 보면 단순하지만,N마리가 동시에 움직이면 복잡해지기 시작한다.일단 제한시간이 1초인 걸 보고 당황했다.상어가 최대 10,000 마리가 존재할 수도 있다.이를 하나씩 움직이면서 처리해야 하는데, 낚시왕도 최대 100번 움직이고 100칸을 확인하며 상어를 잡는다.어떻게든 로직을 제대로 짜야 1초 안에 풀어낼 수 있을 것이다.대신 메모리는 512 MB로 넉넉하게 준다.맵을 사용할 때 int형 2차원 배열을 만들어야 하는데, 이걸 또 하나만 만드는 게.......

이러다 취업은 하겠나 [내부링크]

SSAFY에 입과한 지 어언 3개월이 되어 간다.열심히 안 했다고 생각하지는 않지만,남는 게 없이 해온 것 같다.그나마 블로그라도 이렇게 작성하고 있어서 다행인 것 같다.공부를 죄다 알고리즘 위주로 쏟아 부은 것 같은데,오늘 참 기분이 밍숭맹숭하다.오늘 백준 특강이 있었다.알고리즘을 공부하는 게 정말 중요하지만,시니컬하고 덤덤한 표현들이 자꾸 뼈를 쳐대는 기분이었다.어차피 평생 알고리즘 문제만 풀 것도 아닌데,모르는 문제에 매달리지 말고,모르는 건 인정하고,빨리 그 해답을 찾아 자기 것으로 익힌다.알찬 강의였음은 분명하지만,희망 언저리의 느낌은 없었다.취업 스터디에서도 마냥 블로그에 1일 1포스팅에 매너리즘.......

[JDBC] Java × MySQL 연동 [내부링크]

예전에 공부한답시고 MySQL을 미리 깔아놨었는데,SSAFY에서도 사용하길래 재설치 안 해도 된다고 해서 좋았다.그 때만 좋았다.여러 USER를 계속 생성하고 MySQL Workbench로 Connection을 관리하는데기존에 분명 생성하라고 한 적 없는 USER들이 자꾸 등장했다.수업을 따라갈 수 있는 환경 자체가 되지 못했다.수업 열심히 들으려고 했는데,이런 것부터 막혀서 서운한 건 아니지만 귀찮다.<MySQL 영역>1. CREATE DATABASE(SCHEMA)2. CREATE USER3. GRANT4. CREATE TABLE<Java 영역>1. Add MySQL Library2. Coding3. Check Connection각각을 보면 별 거 아니지만,SQL 문들이 항상 낯설게 다가오기 때문에 일일이 구글링 했.......

[백준 2156] 포도주 시식 - Java [내부링크]

이 문서는 [BOJ 2156 포도주 시식]을 바탕으로 작성되었습니다.DP1. 점화식네이버 수식 쓰는 게 약간 번거롭다.왜 이러한 점화식이 도출되는지 생각해보자.백준에 제시된 예시를 보자.보통(일지는 모르겠지만) DP의 경우 마지막 배열 칸의 값이 정답이 되는데,(물론 여기서도 그렇게 구현하지만) 이 문제에서는 그렇게 구할 수가 없다.위의 예처럼 마지막 1번 잔을 마시지 않을 경우에만 문제에서 요구하는 정답이 된다.마지막으로 선택할 잔의 위치기 끝부분이라는 보장이 없다.1만큼 든 잔을 선택하는 것보다 8만큼 든 잔을 선택하는 것이 최대값을 가지는 상황이다.이렇게 말만 하지 말고 N=3일 경우도 생각해 보자.이 상황에.......

[SWEA DP] 실전문제2 - 완전정보 게임 [내부링크]

이 게시글은 SW Expert Academy의 「SW 문제해결 심화 - 동적계획법」 강좌를 바탕으로 작성되었습니다.1. 바둑돌 가져가기 1 초기 : 바둑돌이 K개 있다. 동작 : 자신의 차례에 1개, 3개, 4개의 돌을 가져갈 수 있다. 승부 : 자신의 차례의 동작을 할 수 없으면 그 사람이 패자(loser)가 된다. 부분문제 W(i) : 돌의 개수가 i개일 때, 이기는 방법이 있는 사람 기저조건 : 돌의 개수가 1, 3, 또는 4개라면 F(선수)가 항상 이길 수 있다.주어진 i개의 돌에 대해 F가 돌을 1, 3, 또는 4개를 가지고 간 후,남은 바둑돌에 대한 바둑돌 게임 W(i-1), W(i-3), W(i-4)에 대해서S(후수)가 이기는 방법이 하나라도 있다면 W(i) = F이다.......

[SWEA 4013] 특이한 자석 - Java [내부링크]

자료구조 연습 겸 원형리스트로 톱니바퀴를 구현했다. 각 날의 극은 boolean형으로 정해 쉽게 풀기로 했다.상식이 오히려 문제를 푸는 데 방해가 됐다. 인력 때문에 회전한다는 게 이해가 안 됐다. 처음에 척력을 생각하고 같은 극이면 회전하는 줄로 착각했다. 그리고 N극이 아니라 S극에 점수를 계산하는 걸 제대로 확인하지 않아 꽤나 고생했다. 문제 좀 똑바로 읽자...19,700 KB / 111 ms / 4,582 B

[Git] Pull Request [내부링크]

이 게시글은 위 영상을 참고하여 작성했습니다.드디어 CS 스터디에서 PR을 사용하기로 했다. 항상 혼자서 Repo를 관리하다 보니 Fork를 사용할 기회가 없었는데, 드디어 공부를 하게 됐다.PR의 전체적인 흐름은 아래와 같다.예전 Github 계정과 연동하여 테스트를 성공적으로 마쳤다.앞으로 CS 및 Algo 스터디에 PR로 과제를 잘 제출하도록 하자.

[Graph] Tree의 종류 [내부링크]

1. Binary Tree각 Node의 Child Node의 수가 2개 이하인 Tree2. Ternary TreeBinary Tree와 달리 각 Node의 Child Node의 수가 3개까지 이루어진 Tree3. Binary Search TreeBinary Tree와 달리 각 Node의 Left Child Node들은 해당 Node보다 작은 값을 가지고, Right Child Node들은 해당 Node보다 큰 값을 가지는 Tree이러한 구조로 인해 검색(Search)이 가능하다.4. Balance1) Balanced TreeRoot Node를 기준으로 양 옆 Child Node의 수가 비슷한 Treee.g. Red-Black Tree, AVL Tree2) Unbalanced TreeRoot Node의 Child Node가 한쪽으로 치우쳐진 Tree이는 Tree의 의미가 크게 없어진다. 단순 배열이나 연결리스트와 다를 바 없다........

[백준 1759] 암호 만들기 - Java [내부링크]

뭔가 오랜만에 조합으로 구현하는데, 조합은 항상 새롭다.이번에는 매개변수를 잔뜩 넘겨줘서 구현했다. 성능 좋은 코드로 작성하고 싶은데, 너무 졸렵다.오늘도 문제를 제대로 읽지 않아 낭패였다. 모음이 최소 하나만 들어가면 되는 줄만 알았는데, 틀리고 다시 보니 자음도 2개 이상 포함되어야 했다. 어차피 모음 구하는 로직만 있으면 반대로 하면 돼서 금방 해결했다.처음에 구상을 되게 복잡하게 했었는데, 막상 구현에 가까워지니 점점 간결해졌다. 괜히 어렵게 생각했던 것 같다.

[SWEA 5656] 벽돌 깨기 - Java [내부링크]

이 문서는 SW Expert Academy의 5656번 문제를 바탕으로 작성되었습니다.백트래킹, 시뮬레이션, BFS 문제재밌었다. 중간에 변수 하나 잘못 써서 계속 틀렸었는데,이 정도면 [BOJ 19236 청소년 상어]보다는 풀만 했던 것 같다. 오늘 SW 역량테스트 A형(모의)를 치루는데, 비슷한 유형이 나오면 좋을 것 같다.이 문제를 풀 때 주의할 점은 다음과 같다.1. 배열 복사2. BFS를 응용한 연쇄 반응 처리처음에는 부순 벽돌의 최대 개수를 구하는 문제인 줄 알았는데, 이번에도 역시 문제를 잘못 읽어서 남은 벽돌의 수를 세는 걸 나중에서야 깨달았다.방향벡터를 사용하는 데 어느 정도 익숙해진 것 같아 다행이다. BFS도 처음에는 정말 막막.......

[정올 1863] 종교 - Java [내부링크]

이 문서는 JUNGOL의 [1863 종교]를 바탕으로 작성되었습니다.처음으로 정올 문제를 풀어봤다. 사실 이전에도 풀 기회는 있었는데, 백준이며 SWEA며 부담스러워서 넘겼었다.오늘은 피할 수 없이 과제로 제출해야 하는 문제라 억지로 풀게 되었는데, 생각보다 재미있었다.상호배타집합인지 아닌지, 또는 그 개념을 모른다면 어떻게 풀 수 있을지 정말 아득하다.Disjoint Set 풀이 말고 해답을 찾을 수 있을지 모르겠다. 억지로 연결리스트로 구현하면 만들기야 하겠지만, 오버플로우나 시간초과가 생길 것만 같다.다행히 오늘 학습한 내용이라 복습하기에도 아주 적절한 문제였다고 생각한다. 말했다시피 오늘 처음으로 습득했고, 기존 코드를.......

[Java] System.in.read() - 1 [내부링크]

알고리즘 문제를 풀다 보면 한 문자를 입력받고 바로 처리해주어야 할 때가 있다.보통 BufferedReader class의 read() 메소드를 사용하거나,String으로 입력받고 charAt() 메소드를 사용하기도 한다.다른 방법들도 여럿 존재하지만,Scanner나 BufferedReader Instance가 없어도 System.in에 이미 read() 메소드가 존재한다.스터디나 코드를 공유하면서 이 메소드에 대한 질문을 많이 받는데,막상 쓰려면 생각해야 할 게 많아서 그냥 한 문자씩 입력받는 메소드라고 대신하고 넘긴다.뭐라고 설명해야 할지 모르겠다는 것도 있지만, 생각해야 할 게 많은 까다로운 친구다.우선 System class부터 살펴보자.우선 우리가 출력할 때 사용하는 Syste.......

[Java] System.in.read() - 2 [내부링크]

이제 FileInputStream class를 살펴보자. 봐야 한다.BufferedInputStream 내부에서 FileInputStream의 read(byte b[], int off, int len) 메소드가 호출된다.또, 그 메소드는 native int readBytes(byte b[], int off, int len) 메소드를 호출한다.낯선 키워드가 보인다. "native"는 간단하게 말하자면, Java에도 한계가 존재하기 때문에 C/C++로 구현된 파일과 호환된다. 즉, Java가 아니고 C/C++(또는 다른 언어)에서 돌아간다는 의미다.다음 링크를 보면 이해가 되기 쉬울 것이다.자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 가상 머신(JVM)위에서 실행되고 있는 자바코드가 네이티브 응용 프로그램(하드웨어.......

[귀멸의 칼날] 무한열차 [내부링크]

내일 시험인데 영화를 봤다.즐거웠다. 넷플릭스에서 시즌 1을 정주행 해두길 잘했다.잘은 모르지만 기존 애니들의 방식과는 달랐다.스토리가 완전 이어지기 때문에 안 보면 시즌 2를 볼 수 없을 것 같다.상술이 고약하다.렌고쿠가 정말 멋있었다. 평범한 고구마인 줄 알았는데, 아주 맛있고 달콤한 꿀고구마였다.스포가 될까 우려되어 제대로 적을 수는 없어 아쉽다.사실 적기 귀찮은 것도 있지만, 아무튼 재밌었다.우마이. 우마이. 우마이... 맛있는 영화였다.날이 너무 추웠다. 벚꽃이 필 시기가 왔는데, 봉오리가 도로 쏙 들어가버리지는 않을까 우려될 정도다.오늘 밤에는 따뜻하고 행복한 꿈을 꾸고 싶다.오늘은 달이 상현이다.......

[백준 13301] 타일 장식물 - Java [내부링크]

DP 관련 브론즈 마지막 문제. 역시나 피보나치 문제였다.딱히 할 말이 없습니다. 다음 링크들을 확인하시면 더 좋을 것 같습니다.

[SWEA DP] 실전문제1 - 숫자판 놀이 [내부링크]

이 게시글은 SW Expert Academy의 「SW 문제해결 심화 - 동적계획법」 강좌를 바탕으로 작성되었습니다.문제N * M 크기의 숫자판에서 위에서 아래로 가면서 계속 더한다고 할 때, 그 경우 결과가 가장 큰 값은?이동은 , ↓, 중 하나이다.위처럼 숫자판이 있다고 할 때, 첫줄은 그대로 있고 2행 1열(-5)부터 계산하기 시작한다. 그 때 2행 1열로 이동할 수 있는 칸은 1행 1열(10)과 1행 2열(2) 두 Cell이 가능하다.10 + (-5) > 2 + (-5)이므로 1행 1열에서 내려온 값으로 2행 1열의 값을 10 + (-5) = 5로 갱신한다.2행 2열(7)의 경우는 1행 1열(10), 1행 2열(2), 1행 3열(8)이 접근할 수 있다. 이 때 최댓값이 1행 1열 10이므로.......

[백준 2293] 동전 1 - Java [내부링크]

이번 주 알고리즘 스터디에서는 DP 관련 문제를 풀기로 했다.점화식을 짜는데 잠을 제대로 못 잤는지 오늘따라 머리가 안 돌아가고 그래서 그냥 마음 편하게 구글링하고 풀었다.처음에 딱 봤을 땐, 별 거 아니라고 생각했는데 착각이었다. 컨디션을 탓하긴 했지만, 좋았으면 바로 생각해냈을지 잘 모르겠다. DP는 참 구현은 쉬운데, 생각해내는 방식이 아직까지는 까다롭게 느껴진다.손으로 잘 설계하고 구현하는 연습을 해야 하는데, 오늘은 정말 별로다. 그냥 주석이나 열심히 달아야지.구현구현에서는 사실 위에 정리한 점화식을 한 줄로 줄일 수 있다.DP에서 for문을 수행할 때 Inner for문은 초기값을 그냥 coin[n]으로 주면 불필요한 판.......

[백준 14585] 사수빈탕 - Java [내부링크]

DP 관련 문제N개의 사탕 바구니에 M개의 사탕이 들어있고, 수빈이가 한 칸 이동할 때마다 사탕이 하나씩 녹아 없어진다.수빈이가 사탕 바구니에 도착한 시점에 녹은 사탕의 수는 다음과 같다.처음에 위에서 정리한 식이 음수라는 걸 생각하지 못하고 3~4번 틀렸다.DP배열은 우선 int[301][301]의 크기로 생성한다.읽어 들인 사탕바구니의 각 x, y의 좌푯값의 최댓값을 X, Y에 저장시켜 DP 배열 갱신은 (X, Y)까지 돌게 했다.즉, DP[X][Y]의 값이 정답이다.점화식은 다음과 같다.입력된 사탕 바구니의 좌표에 해당하는 곳은 -1로 플래그를 달아 두고,순차적으로 접근 시 -1을 만나면 해당하는 관계식으로 갱신했다.TC를 디버깅한 결과구.......

[백준 11726] 2×n 타일링 - Java [내부링크]

알고리즘 스터디 과제인 [13976 타일 채우기 2]를 풀다가 도저히 안 풀려서 일단 비슷한 유형의 문제를 찾아 풀었다. 비트마스킹도 적용하며 풀어야 하는 것 같은데, 아직은 손을 못 대겠다. 열심히 구글링도 해서 풀이를 봤는데도, 모르겠어서 비슷한 문제를 연습하고자 다른 문제를 풀기로 했다.이 분의 문제 풀이 강의를 보고 DP를 어떻게 접근해야 하고, 점화식의 개략적인 형태를 알 수 있었다. 강의에서는 재귀식으로 구현했는데, 풀이를 보고 나니 정말 별 거 아니라는 생각에 단순 for문으로 구현했다.자세한 설명은 위 영상을 보는 걸 추천한다. 명쾌하다.구현성능 개선

[백준 11727] 2×n 타일링 2 - Java [내부링크]

DP 연습문제오늘은 사실 푹 쉬었다. 어제 아래 문제와 한 번에 풀어냈는데, 게시글은 작성해야 하니까 우려본다.일주일에 한 번 작성하지 않아도 된다는 점이 있지만, 그래도 성실하게 살면 언젠가는 뭐라도 남겠지 싶어 작성한다. 이제 또 시험의 연속일 테고, 요즘 배우는 웹에서는 진도 빼는 속도가 너무 빨라 걱정이다. 예전에 혼자 node.js나 얼핏 다뤄봤는데, Ajax를 배웠더니 재밌었다. Spring을 얼른 배우고 싶다.음, 11726 문제와 논리와 구조가 너무 비슷하여 중복해서 설명하고 싶지 않다. 결코 귀찮은 게 아니다. 오늘도 주석만큼은 열심히 달아야지.

[백준 17135] 캐슬 디펜스 - Java [내부링크]

못 풀고 있다가, 나중에 그냥 처음부터 새로 풀었던 문제.기존 코드를 아무리 살펴봐도 틀린 이유를 알 수 없었다. 시뮬레이션 문제는 정말...아래는 새로 작성한 의사코드 및 구현코드이다. 문제 분류에 BFS도 있던데, 그건 어떻게 푸는 거지?구현

VSCODE에서 서버통신 [내부링크]

소싯적 HTML을 만지작 거리면서 코딩에 흥미를 가지게 됐다. CSS도 제대로 못 다루던 시절, table을 이중으로 사용하면 예쁘게 출력할 수 있다는 걸 알게 되었을 때 정말 행복했다. 하지만 웹이 너무 어려워졌다. Server는 무엇이며 Client는 무엇이고, Network는 무엇인지 정말 어렵다. 그래도 요즘 CS스터디를 하면서 Network 담당하시는 분이 정말 설명을 맛깔나게 해주셔서, 잘 줍줍하고 있다.오늘 과제물을 제출하기 앞서 주구장창 STS(사실 그냥 eclipse의 기능만 사용하고 있다)만 사용하다가, 오랜만에 제일 익숙한 VSCODE를 사용하려 했다. JS로 구현되어 있는 AJAX 통신을 jQuery로 변환하는 게 다였다. 그런데 VSCODE에서는 자꾸 JS.......

[백준 14852] 타일 채우기 3 - Java [내부링크]

알고리즘 스터디 과제를 하며 이렇게까지 벽에 부딪히게 될 줄은 몰랐다. 우선 DP에 대한 이해도가 부족했고, 비트마스킹에 대한 지식도 부족했다. 그래서 비슷하고 비교적 쉬운 문제를 풀기 위함이었는데, 일단 어찌저찌 풀어냈다.아마 Java 언어 특성 상 C/C++보다 느리다는 점도 있겠지만, 기껏 구현했는데 처음에 시간초과가 뜨니 허탈했다. 물론 이 문제를 점화식으로 접근하여 푸는 방법은 알고 있다. 하지만 내가 풀어야 하는 문제는 2718번이기 때문에 이를 연습하고자 시도했으나, 이 사단에 이르렀다.우선 2718번 문제가 너무 어려워 구글링 한 결과 다음 링크를 찾을 수 있었다.이 분의 내용을 살피고, 구현한 결과는 다음과 같다.......

넋두리 [내부링크]

오늘 문제 푸는데 너무 막혀서 게시글 쓸 건덕지가 없다.[SWEA 4013 특이한 자석]을 풀 때 원형리스트까지 구현하며 만들었는데, 기본 TC도 계속 틀려 할 맛이 안 난다. 그리고 오늘따라 너무 정신이 없다. SSAFY에서 배우는 내용도 중구난방이었다. 갑자기 SQL, 갑자기 알고리즘, 갑자기 취업특강. 물론 예정되어 있던 일들이었지만, 막상 겪어 보니 정신이 하나도 없었다.그래도 SQL 연습문제는 깔끔하게 풀어냈다. 글감이 없는 상태지만, 그 내용을 함부로 게시글로 작성할 순 없기에 이렇게 넋두리를 한다. 취업특강도 역시 내가 먼저 자소서를 작성하던지 해야 피가 되고 살이 되는 느낌인데, 그냥 그럭저럭 좋은 말만 듣고 끝난 것 같.......

[SWEA 1767] 프로세서 연결하기 - Java [내부링크]

* 문제는 아래 링크(1767 검색)에서 확인해주세요.계속해서 49/50이 떠서 곤란한 문제였다. 도대체 왜 틀리지 했는데, TALK를 둘러보다가 그 이유를 찾아냈다. 이번 문제는 따로 설계하지 않고 무작정 짰는데, 역시 설계부터 제대로 하고 시도해야겠다.DFS로 풀었습니다. 맵을 모두 탐색하고, 코어(Core)를 만날 때마다 4방향으로 탐색하고 백트리킹을 해줍니다. 탐색이 종료되면(기저조건), 적절하게 처리해주로 메소드를 종료합니다. 그리디 풀이법도 있다고 들었는데, 어떻게 구현되고 가능한지 이해하지 못해 나중에 시도해보겠습니다.27,976 KB / 437 ms / 3,653 B

[백준 9625] BABBA - Java [내부링크]

DP로 풀려고 어찌저찌 풀어낸 문제, 그치만 단순한 피보나치 수열 문제라는 걸 깨닫고 김이 샜다.알고리즘 분류에 DP와 구현이 있는데, 단순한 구현 방식으로도 해결할 수 있다.1. '구현' 풀이코딩을 하고 보니 생각보다 너무 단순한 구조라 평소와 다르게 그냥 main()에서 전부 처리했다.2. 'DP' 풀이굳이 A배열과 B배열을 따로 생성하지 않고, B배열 안에 A값이 모두 포함되기 때문에 B배열만 생성하여 처리했다.피보나치 수열 생성은 다음 링크에서도 확인할 수 있습니다.3. 효율 극대화생각보다 쉬웠던 문제라 1등하려고 어지간히 애쓴 문제다. 새로 안 사실은 다음과 같다. 확실한 건 아니니 참고만 하시길 바랍니.......

[백준 16198] 에너지 모으기 - Java [내부링크]

그리디로 풀 수 있을 줄 알았는데, 예외가 있나 봅니다. 그냥 완전탐색으로 푸는 법뿐인가요?항상 구슬 무게의 최댓값일 선택하고 왼쪽이나 오른쪽의 구슬을 제거하는 방식으로 수행하면, 최댓값이 항상 곱해지므로 최댓값이 나온다고 생각했습니다. 하지만 지금 글을 쓰면서 예외가 몇 가지 생각이 나네요,,, 2*3이 1*4보다 클 테니까요,,,하,,, 헤매느라 괜히 시간만 많이 잡아먹게 되었습니다.Design그리디로 풀 수 있을 줄 알고 아래와 같이 설계했고, 위에서 틀린 이유를 적었습니다. 아무튼 참고만 하시길 바랍니다. 그리고 오기를 부려 한 번 탐색할 때마다 에너지의 최댓값을 구하는 방식으로도 구현했으나 틀렸다고 합니다. 예제에.......

[백준 19236] 청소년 상어 - Java [내부링크]

골드 2 시뮬레이션 백트래킹 문제처음에 문제 풀 때 너무 막막했다. 설계를 해도 큰 틀이 잡히지 않아서 일단 어느 정도 구현을 한 뒤에 어떻게 돌아가는지 확인하면서 머리를 쥐어짜면서 풀어냈다. 제일 큰 난관은 백트래킹 시점을 잘못 생각하고, 이게 왜 틀렸는지 한참을 생각했다. 마침내 답을 알았을 때는 그 당연하던 게 허탈하게 느껴지기도 했다.사실 이 문제로 게시글을 쓰는 게 더 어렵게 느껴진다. 어떻게든 풀어냈으나 이걸 어떻게 설명을 달아야 할지도 모르겠다.일단 이 문제를 풀 때 중요한 것은 다음과 같다.1. 배열이나 객체를 복사할 때 즉, 백트래킹을 구현하고자 할 때 원본이 복사되지 않도록 주의해야 한다.2. 문제.......

[백준 2748] 피보나치 수 2 - Java [내부링크]

DesignPseudocodeSolution using DP동적계획법을 배우고는 있지만 다양한 상황에서 적용하기가 쉽지 않다. 아무튼 계속 연습해야겠다.위 내용은 다음 링크에서도 확인할 수 있습니다 :)

[0222 Debug Test] [내부링크]

문제한 Project Archive File을 import하여 버그투성이인 프로젝트를 정상적으로 되돌리는 Debug Test 수행Flow1. Base VO(Domain) 및 이를 상속받은 VO Class 점검 (VO와 DTO는 유사한 의미이지만 여기서는 통용된 용어로 간주)2. DAO Interface, implement class 점검3. User Exception Class 점검4. Test Class 점검 및 테스트위와 같은 순서로 Test 진행을 권하셨다. 하지만 전체적인 플로우가 그렇다는 것이지 어차피 4번에서 이전 단계들을 왔다갔다 할 것이다. 이 순서는 큰 의미에서 볼 때 서비스를 유지보수하는 단계라고 생각이 들기도 했다. 익숙해지면서 각각 자신의 스타일을 찾게 될 것이라고 생각한다.숙지사항1. 생성자.......

[백준 13300] 방 배정 [내부링크]

엄,,, IM 대비라고 떠서 풀었지만, 설마 이 정도로 나오지는 않겠지,,, 방심하지 말자,,,

[백준 9663] N-Queen [내부링크]

체스 두는 걸 참 좋아했었는데, 이렇게 만나니 별로였다.DFS를 기반의 문제로 최대한 가지치기(불필요한 경로는 검사하지 않음)를 시도하는 방식으로 풀어야 한다. 안 그러면 아무래도 시간초과가 뜰 것으로 생각한다.이번 문제는 풀이 강의를 이미 봤기 때문에 따로 손으로 정리하지는 않고 풀이만 했다.일단 풀이 강의 내용은 다음과 같다.1. 쉬운 구현2. DFS위 1번은 간단하게 구현할 수 있는 방식이고, 나름 개선해보고자 int[][]로 보드 전체를 검사시키려고 했다. 하지만 눈에 띄는 효과는 없었고 오히려 2차원 배열로 인해 메모리를 더 많이 차지하는 것으로 보인다(5112 ms에서 4924 ms로 약 0.2초 단축...).

[백준 14889] 스타트 링크 [내부링크]

아 생각보다 까다로웠다. 조합을 총 두 번 돌려야 답이 나온다.1. 팀 구성2. 팀 능력치 계산위 두 가지 기능을 둘 다 조합으로 해결했다. 다른 분들의 풀이를 보니까 약간 다른 풀이가 있어 보이는데, 오늘은 시간이 너무 늦었기 때문에 더 이상 살펴 보고 싶지 않다. 일단 기본적으로 백트래킹을 해줘야 하는데, 조합 돌리는 과정 자체에도 들어가고, 2번 기능 구현 시에도 방문배열을 구성하여 불필요한(사실 조금 돌긴 돕니다.) 반복을 최대한 줄였다. 아래 디자인에서도 볼 수 있듯이 수식으로 접근하여 불필요한 계산을 하지 않도록 조정했다.* Design

[백준 2961] 도영이가 만든 맛있는 음식 [내부링크]

Solution식재료를 집합으로 생각했을 때, 식재료를 하나 이상 사용해야 하므로 공집합을 제외한 모든 부분집합을 탐색하여 최적의 맛을 구해야 합니다.bitmask & Power Set1. init_BOJ2961()1. N은 Main 클래스의 멤버변수이므로 0으로 초기화 되어 있습니다.2. 표준입력(System.in)을 그대로 사용하여 N값을 입력받습니다.3. 주어진 N만큼의 크기를 가진 신맛(S), 쓴맛(B) 배열을 생성합니다.4. 신맛과 쓴맛의 차이를 저장할 변수(flavorDiff)를 초기화합니다.2. ready()1. 표준입력(System.in)을 그대로 사용하여 맛의 수치를 입력받아 신맛, 쓴맛 배열을 초기화 합니다.3. bestIngredients(1<<N)1. 매개변수로 1<<N(함.......

[백준 17135] 캐슬 디펜스 - 미해결(3. 4. 해결) - Java [내부링크]

해결했습니다.이거 틀렸습니다. 도대체 왜 틀린지 모르겠습니다. 고수님들 제발 어디가 잘못된 건지 댓글 하나 부탁드립니다.길어서 잘렸습니다. 고대로 복사해서 쓰시면 됩니다.사용한 TC들입니다. 위 소스에서 다 통과됩니다.

[백준 1987] 알파벳 - Java [내부링크]

위에 작성한 것처럼 그대로 구현했는데, 한 번에 통과하지 못했습니다...원인은 move() 메소드의 존재성이었는데, 일단 짜면서부터 dfs의 for문과 중복된다는 것을 깨달았습니다.move()는 말이 움직일 수 있다면 true, 움직이지 못한다면, 즉 탐색이 완료된 것이라면 false를 반환하여 기저조건을 발생시키려고 했습니다.그리고 매 재귀 호출 시 cnt로 움직인 횟수를 매개변수로 넘겨주어야 했습니다.아 그리고 visited 배열은 정말 무의미하여 지웠습니다. 없어도 잘 돌아갑니다. 유효성은 직접 확인하시면 좋을 것 같습니다.어느 정도 방향성은 맞게 설계했지만, 역시 한 번에 완벽하게는 어려웠지만, 계속 이런 식으로 구현해야 머리 속에 더.......

[백준 1436] 영화감독 숌 [내부링크]

1. Integer.toString(C).contains("666")문제에서 원하는 방식의 풀이라 생각하여 최대한 직관적으로 접근한 방법입니다.2. TC를 분석하여 패턴 찾기FileWriter를 사용하여 1~10000번째 666포함 수들을 txt 파일로 만들어 패턴을 분석했습니다. 패턴이 있긴 있으나 명확하게 쓸 수 있는 패턴이 또렷하게 보이지는 않았습니다. 그래서 뽑아내기 쉬운 패턴에만 적용했습니다. 우선 파일을 올려두겠습니다.메소드 오버로딩을 하여 간략하게 짜려고 노력했습니다.3. 성능개선String의 contain() 메소드보다 좋은 성능을 내는 메소드를 작성하였습니다.전처럼 C는 1씩 증가시켜 매번 검사하는데, 이때 각 자리수가 6인지 판별하여 연속적으.......

[백준 2751] 수 정렬하기 2 [내부링크]

1. PriorityQueue자동으로 정렬해주는 자료구조 PriorityQueue를 활용하여 입력되는 대로 Queue에 offer() 하고, 입력이 끝나면 poll()하여 오름차순으로 출력합니다.입력하는 부분에서 헷갈리신다면 그나마 가독성이 좋은 다음 링크를 보셔도 됩니다. 미비한 차이(300ms 정도 단축)이지만 성능개선을 위해 위와 같이 작성했습니다.2. boolean[2000001]1. 문제 상에서 숫자의 범위가 -1,000,000 ≤ N ≤ 1,000,000 이므로 전체 2,000,001 크기의 boolean 배열을 생성합니다.2. 인덱스 번호가 음수를 가질 수는 없으므로 수를 입력받으면 백만(1,000,000)을 더하여 해당하는 인덱스의 값을 true로 변경해줍니다.3. 입력이 끝나고 출력 시 boolean .......

[백준 11653] 소인수분해 [내부링크]

1. 재귀재귀를 계속해서 연습해야 감을 잃지 않지 않을까 해서 재귀로 구현했습니다.2. 반복문재귀가 아닌 반복문으로도 구현할 수 있습니다. 재귀와 형태가 거의 동일하므로 주석은 짧게 달았습니다.3. 성능개선위 두 코드의 성능은 대동소이하지만, prime number를 구할 때 조금 더 적게 반복하는 구문이 있습니다.2부터 루트 N까지만 반복하면 되는데, 정확한 수학적 원리는 아래 링크를 확인하세요 :)다음은 성능개선을 한 코드입니다.(작성 시점 백준에서 1등 / 메모리 14564 KB, 시간 132 ms)

[백준 2563] 색종이 [내부링크]

도화지를 boolean 배열로 구현하고 각 색종이 좌표부터 100칸(10*10)을 탐색하여 색칠해주기Result

[백준 2447] 별 찍기 - 10 [내부링크]

재귀로 풉니다.1. boolean[][] 버전2. char[][] 버전 - boolean보다는 빨랐습니다.Result

[백준 10757] 큰 수 A+B [내부링크]

쉬는 날이라 쉬운 문제 하나 풀어야지~ 했는데 Java로 푸는 게 까다로운 문제였다.String charAt()으로 한 자리마다 다 계산해서 제출하고 예제도 정답과 동일한데 왜 틀렸는지 모르겠는 상황이다. 시간이 여유로우시다면 부디 다음 코드를 분석하고 왜 틀렸는지 조언 부탁드립니다. 달게 받겠습니다...뭐가 됐든 결국 구글링을 통해 BigInteger라는 새로운 class를 알게 되었다... 다행이군,,,primitive type처럼 자유자재로 연산자들을 사용할 수는 없지만, 메소드들이 많으니 필요하면 그때 보도록 하자...BigInteger Class를 활용한 풀이

개발자가 되기 위해서 [내부링크]

If debugging is the process of removing software bugs,then programming must be the process of putting them in.디버깅이 버그를 잡는 거라면, 프로그래밍은 버그를 집어넣는 것이다.프로그래밍을 배우면서 훌륭한 개발자가 되기 위해 대부분 노력하겠지만, 무분별한 프로그래밍은 데이크스트라의 말처럼 버그의 씨앗을 뿌리는 것이다. 프로그래밍을 배우는 데 있어 여러 흥미로운 코드들을 클론하며 쉽게 빠르게 실력을 쌓는 방법이 있다. 하지만 백지 상태에서 다시 그 코드를 짜보라고 하면 누가 완벽하게 다시 구현할 수 있을까? 물론 따라해보며 실력을 쌓는 것은 좋은 선택이다. 하지만 클론의 목적은 따라하는 게 아니라 어떻게 구현.......

[SWEA 1873] 상호의 배틀필드 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 1861] 정사각형 방 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 1218] 괄호 짝짓기 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[백준 2494] 탑 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 3499] 퍼펙트 셔플 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 1223] 계산기2 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 1289] 원재의 메모리 복구하기 [내부링크]

자세한 내용은 위 링크를 확인하세요 :)

[SWEA 9229] 한빈이와 Spot Mart [내부링크]

자세한 내용은 위 링크를 확인하세요 :)