본문 바로가기

분류 전체보기1042

자바 Integer 캐싱에 대해 (Java IntegerCache, Autoboxing) 간단한 자바 문제를 만들어달라는 요청을 받았다. 장난을 섞어서 이전에 알고리즘 문제를 풀 때 이슈가 있었던 상황을 문제로 만들었다. (이하의 코드 결과는 자바 실행 시의 옵션이나 구현에 따라 달라질 수 있다. 아무런 옵션을 넣지 않고, 이하의 코드만 실행한 경우를 가정한다.) Integer a = 100; Integer b = 100; Integer c = 200; Integer d = 200; System.out.println(a == b); System.out.println(c == d); 어찌보면 당연해보이는 문제지만, 은근 주변에 시켜보면 답이 많이 다르게 나올꺼다. 1. 객체끼리의 주소값 비교이므로 false, false 라는 답변 -> 훌륭하다. 2. 에이 당연히 true, true지 -> 좀.. 2024. 2. 27.
[자바] 백준 1953 - 팀배분 (java) 목차 문제 : boj1953 필요 알고리즘 이분 그래프 (bipartite graph), 그래프 탐색 (BFS, DFS 등) 이분 그래프에 대한 개념이 있다면 좀 더 쉽게 풀 수 있는 그래프 탐색 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 2년전에 못 푼 기록이 있어 풀어봤다. 별 어려움 없이 바로 푼걸 보면 발전은 있었나보다. 2년전엔 HashSet을 사용해 넣을 때 마다 겹치는게 있는지 검색해본 것 같다. .. 2024. 2. 26.
[자바] 백준 16935 - 배열 돌리기 3 (java) 목차 문제 : boj16935 더보기 필요 알고리즘 구현력(?) 그저 제시된 대로 구현만 잘 하면 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 그냥 제시된 대로 동작하도록 구현만 해주면 되는 문제이다. 경우에 따라 쉽지 않을 수 있긴 하다. 그래도 RPG Extreme (백준 17081) 같은 구현문제보다는 귀여운 편이다. 기왕 구현하는거 최대한 깔끔하게 한번 짜보면 개발 연습도 되고 좋다. 코드 :.. 2024. 2. 26.
개발자가 질문하는 방법 (회사, 상사, 커뮤니티, 개발관련 질문 등) 이번에 진행중인 디자인 패턴의 아름다움 스터디에서, 책 내용관 관련 없지만, '질문하는 방법'에 대해 얘기해보자는 토론 주제가 나왔다. 그래서 내 생각을 정리해봤다. 주의점 : 내 경험과 생각을 적어둔 것 뿐이니 정답은 아닐테고, 더 좋은 방법 역시 있을꺼다. '개발자가' 질문하는 방법이라 적어두긴 했지만, 사실 다른 업종도 비슷비슷할 것 같긴하다. 아무튼 내가 개발자니 다른 업종은 잘 몰라서 범위를 축소해 제목을 적어두었다. 내 생각에 질문할 때 들어가야 하는 내용은 다음과 같다. 1. 현재 상황 설명 2. 내가 지금까지 해본 것(모르는걸 질문하는 경우) 또는 내가 생각하는 안건(어떠한 결정 사항에 대해 질문하는 경우) 3. 내가 알고 싶은게 무엇인지 1. 현재 상황 설명 질문 시 물어보는 사람이 헷갈.. 2024. 2. 25.
[자바] 백준 17436 - 소수의 배수 (java) 목차 문제 : boj17436 필요 알고리즘 포함 배제의 원리 (inclusion and exclusion) 포함 배제의 원리로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 예제 입력 2를 생각해보자. 2 100 2 3 직관적으로 우린 이걸 푸는 방법을 알고 있다. 100 이하의 자연수 중 2로 나누어 떨어지는 수는 100/2 = 50개가 존재한다. 그리고 3으로 나누어떨어지는건 100/3 = 33개.. 2024. 2. 24.
[자바] 백준 24956 - 나는 정말 휘파람을 못 불어 (java) 목차 문제 : boj24956 필요 알고리즘 DP (동적 계획법) DP로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 'WHE'가 가능한 경우의 수를 찾는다고 생각해보자. 이 경우 매우 직관적으로 가능한데, 하나씩 문자를 살펴보면서 'W'라면 이전까지 나온 W의 수+1, 'H'라면 현재까지 'WH'가 가능했던 경우의 수 + 이전까지 나온 'W'의 수, 'E'라면 현재까지 'WHE'가 가능했던 경.. 2024. 2. 24.
[디자인 패턴의 아름다움] 1. 개요 스터디 메인 페이지 목차 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한대로 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 디자인패턴의 아름다움(왕정 저) 책 입니다. CHAPTER 01. 개요 이 책의 주된 목적은 고품질의 코드를 작성할 수 있도록 돕는 것 1.1 코드 설계를 배우는 이유 데이터 구조와 알고리즘이 효율적인 코드를 작성할 때 필요한 것이라면, 코드 설계에 대한 지식은 확장성과 가독성이 높아 유지 보수가 용이한 고품질의 코드를 작성할 때 필요하다. 고품질의 코드 작성 '나쁜' 코드를 작성하고 싶은 엔지니어는 없을 것이지만, 의외로 많은 소프트웨어 엔지니어가 만족스럽지 못한.. 2024. 2. 24.
[자바] 백준 16563 - 어려운 소인수분해 (java) 목차 문제 : boj16563 필요 알고리즘 정수론, 소수 판정, 에라토스테네스의 체 에라토스테네스의 체를 사용해 소수를 구한 후 소인수분해를 해서 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 백준 3142를 풀면서 좀 더 개선된 소인수분해 테크닉을 익히게 되어, 민상님의 소개로(?) 풀어본 관련 문제이다. 코드 1은 기존에 내가 쓰던방식으로 푼 코드이고, 코드 2가 개선된 소인수분해 테크닉으로 짜본.. 2024. 2. 23.
[자바] 백준 3142 - 즐거운 삶을 위한 노력 (java) 목차 문제 : boj3142 필요 알고리즘 정수론, 소수 판정, 에라토스테네스의 체 에라토스테네스의 체를 사용해 소수를 구한 후 소인수분해를 해서 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 어떤 수가 완전제곱수인지 우선 생각해보자. 내가 풀이를 위해 생각한 완전제곱수 판정은, 소인수 분해 후 각 소인수의 개수가 모두 짝수라면 완전제곱수가 가능하다는 점을 이용하는 것이었다. 예를들어서 예제 입력 2를.. 2024. 2. 23.
에라토스테네스의 체를 활용한 소인수분해 어떠한 수 N을 수인수분해한다고 해보자. 예를들어 60 = 2 x 2 x 3 x 5 이다. 예를들어 입력값이 아래와 같다면 (첫번째 줄에 N = 소인수분해하려는 수의 갯수, 두번째 줄에 소인수분해하려는 수 kn / N은 1 ~ 1,000,000, kn은 2 ~ 5,000,000) N k1 k2 k3... 5 5 4 45 64 54 다음과 같이 각각 한줄로 소인수분해한 값을 출력해야 한다고 해보자. 5 2 2 3 3 5 2 2 2 2 2 2 2 3 3 3 기존에 생각했던 방식은 이하와 같았다. ('더보기') 더보기 내 경우 처음 생각한 방식은, 우선 입력값 N 이하의 모든 소수를 구해두고, 소수 리스트를 순회하며 찾는 방식이었다. 예를들어 N이 60이라면 60 이하의 모든 소수를 우선 구해둔다. 그 후 작.. 2024. 2. 23.