반응형

분류 전체보기 318

[백준]JAVA - 10815번: 숫자 카드

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 풀이 카운팅 정렬 형식으로 문제를 해결할 수 있지만 이분 탐색으로 분류되어 있기 때문에 이분 탐색을 이용해서 풀어보려고한다. 이분 탐색은 중간 위치 값과 목표 위치 값을 비교하면서 반으로 줄여나가는 방식인데 자바에서는 메서드 하나로 귀찮은 이분 탐색 코드를 안할 수 있다. 바로 Arrays.binarySearch() 메서드인데 이분 탐색의 기본 조건과 같이 배열을 오..

알고리즘/정렬 2022.09.15

이분 탐색 Arrays.binarySearch() 메서드 정의 및 사용 방법

알고리즘 문제를 풀다보면 이분 탐색을 이용한 문제를 많이 접할 수 있습니다. 이분 탐색이란 오름차순으로 정렬된 배열에서 반으로 쪼개면서 특정한 값을 찾아내는 알고리즘입니다. 이분 탐색 과정 목표값은 42로 설정하고 아래와 같은 배열이 있다고 가정해보겠습니다. 1. 배열의 중간 '25'을 기준으로 목표값 '42'의 크기를 비교한다. 2. 목표값 '42'가 중간값 '25'보다 크기 때문에 mid+1을 low로 변경 후 다시 중간값을 찾는다. 3. 목표값 '42'가 중간값 '59'보다 작기 때문에 mid-1을 high로 변경 후 다시 중간값을 찾는다. 4. 목표값인 '42'가 중간값이랑 일치. ※ 위와 같이 계속 중간값(mid)을 기준으로 크기를 비교해서 low값과 high값을 ±1을 시키면서 일치하게 만든다..

알고리즘/이론 2022.09.14

[백준]JAVA - 2309번: 일곱 난쟁이

https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 풀이 브루트 포스 기법을 이용해서 해결하는 알고리즘 문제라고 한다. 사실 브루트 포스 기법이 뭔지 잘 모르는 상태에서 풀었다... 문제를 푸는 순서는 아래와 같다. 1. 9명의 난쟁이 키를 더한다. 2. 난쟁이 키를 오름차순으로 정렬한다. 3. 9명의 난쟁이 키를 합한 값에서 100을 뺀 후, 가짜 난쟁이 두 명을 더한 값과 비교한다. import java.io.*; import java.util.*; p..

[Windows10] 파일 확장자 숨김/표시하는 방법

윈도우는 기본적으로 파일 확장자명을 숨긴 상태로 표시합니다. 사실 확장자명이 없어도 불편함없이 컴퓨터를 이용할 수 있고 아이콘 모양으로 어느정도 구분이 가능합니다. 하지만 필요한 순간이 있고 궁금하신 분도 계실 수 있으니까 확장자를 숨기거나 표시하는 방법에 대해서 알아보겠습니다. 위 그림처럼 확장자명이 보이는 파일들도 있지만 대부분이 보이지 않고 있습니다. 어떤 확장자인지 궁금하다면 아래를 따라해주시면 됩니다. 1. 탐색기 상단에 [보기] 탭을 클릭한다. 2. [표시/숨기기] 탭에서 파일 확장명을 체크한다. 3. 파일 확장자 표시 완료

IT 정보/Windows 2022.09.12

오라클 ora-01481: 숫자 형식 모델이 부적합합니다.

해당 오라클 오류는 데이터 타입을 맞춰주지 않아서 생기는 오류입니다. TO_CHAR 함수로 날짜 형식을 변경하려고 할 때 주로 발생하는 오류인데요. 아래 예시로 자세히 살펴보겠습니다. TO_CHAR('20220911', 'YYYYMMDD' // 오류 발생 TO_CHAR(TO_DATE('20220911'), 'YYYYMMDD'), 'YYYYMMDD') // 오류 해결 SELECT TO_CHAR(TO_DATE('20220911'), 'YYYYMMDD'), 'YYYYMMDD') AS TODAY_ FROM DUAL; 테이블 내의 date 컬럼을 넘겨주면 오류가 발생하지 않지만, 다른 형식의 컬럼을 넘겨주면 위와 같은 오류가 발생합니다. 이러한 오류는 TO_CHAR 함수 내에 TO_DATE 함수를 넣어서 쉽게 해..

[백준]JAVA - 2156번: 포도주 시식

https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 풀이 동적 계획법 (dp) = 다이나믹 프로그래밍으로 접근하면 되는 문제이다. dp 관련 알고리즘은 해당 문제가 제시하는 조건에 맞는 점화식만 찾으면 쉽게 해결할 수 있다. 찾기가 어려울뿐... 1. 포도주 잔을 선택하면 무조건 다 마신 후에 제자리에 놓아야 한다. 2. 인접한 포도주를 3잔 연속으로 마실 수 없다. 위 조건에 맞는 점화식을 발견하려면 최소 4번째 포도주까지 진행해봐야한다. 우선 포..

[백준]JAVA - 10546번: 배부른 마라토너

https://www.acmicpc.net/problem/10546 10546번: 배부른 마라토너 마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명 www.acmicpc.net 풀이 Map을 이용해서 풀었더니 처음엔 출력 초과가 발생했다. 이유는 동명이인이였다. 동명이인 문제를 해결하기 위해서 참가 선수 이름을 입력해줄 때 Map에 이미 들어있는 이름이라면 value 값을 1 추가해줬다. for (int i=0; i

[프로그래머스]JAVA - Level2. 타겟 넘버

https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주어진 숫자들로 덧셈과 뺄셈만을 이용해서 목표값을 만드는 문제이다. 모든 경우의 수를 거쳐야하므로 깊이 우선 탐색 (dfs)가 바로 생각이 났다. dfs 함수를 생성하고 마지막 노드까지 탐색했을 때 목표값과 일치한다면 answer++를 해주는 방식으로 코드를 설계했다. 여기서 중요한 건 목표값을 도달했을 때 answer++를 해주는 것이 아닌 마지막 노드까지 탐색을 완료해야한다는 점이다. 깊..

[프로그래머스]JAVA - Level1. 폰켓몬

https://school.programmers.co.kr/learn/courses/30/lessons/1845 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 홍 박사님의 총 폰켓몬의 절반을 최대한 다양한 폰켓몬으로 선택하는 문제이다. 중복없이 선택을 해야하기 때문에 바로 HashSet이 떠올랐다. HashSet을 이용하면 중복은 자동으로 제거가 되기 때문에 문제가 매우 간단해진다. 우선 총 폰켓몬을 전부 HashSet에 넣어서 중복을 제거한다. 이후에 HashSet의 사이즈가 총 폰켓몬의 절반을 넘으면 총 폰켓몬의 절반을 answer에 넣어주고, ..

[프로그래머스]JAVA - Level1. 소수 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12977 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 배열 nums에서 임의의 숫자 3개를 선택하여 해당 수의 합이 소수가 되는 경우의 수를 구하는 문제이다. 소수란 1과 자기 자신 외의 약수를 가지지 않는 1보다 큰 자연수이다. 우선 배열에서 숫자를 가져올 때 3중 for문을 쓰는 게 생각났다. 하지만 너무 비효율적이라고 생각해서 고민해봤는데 도저히 답이 안나왔고, 구글링을 했을 때도 3중 for문을 써서 해결한 게 대부분이였다. for (i..

반응형