전체 글 22

BufferedReader VS Scanner 속도 차이

상황 요약백준 4949번 문제를 풀고 난 후 다른 사용자들의 답변 확인 중에 내가 제출한 코드의 실행 시간이 유난히 돋보임. 같은 언어 (JAVA)를 사용했음에도 불구하고 내 답변의 실행 시간은 다른 사용자들의 두 배. 이미 몇 가지 코드를 보며 대부분 stack을 활용해 문제를 풀어낸 것을 알고 있음. 나와 풀이 방식이 별로 다르지는 않다. 그렇다면 차이가 무엇인가? 입/출력 방식이 눈에 띔. 나는 Scanner를 사용하여 입력 받고 있었고 다른 사용자들은 Buffer를 통한 입력을 받고 있었다. 짐작가는 원인을 찾아냈으면 테스트를 통한 결과를 보고 말아야만 직성이 풀리지 않는가. 그래서 아래와 같이 Scanner -> BufferedReader로 바꿔 답변을 제출해 봄. 실행 시간이 다른 사용자들과 ..

[백준] 1357번: 뒤집힌 덧셈 - JAVA

문제 보기 문제 분석 [요약] 주어진 두 숫자를 뒤집어 더한 값을 뒤집어 출력한다. [푸는 과정] 그냥 답을 도출해 내는것 까지는 어렵지 않았다. 다만 근 한 달만에 푸는 문제라 처음부터 효율적인 코드를 짜내지 못했다. 일단 생각나는대로 코드를 치고 답 제출까지 확인한 뒤 참고할 만한 코드를 구글링 해 보았다. 우선 나는 그냥 두 수를 Scanner로 String 형태로 입력 받아서 사용하였다. 반복문을 이용해 각 숫자의 자릿수를 바꿔준 뒤 덧셈을 하고 덧셈을 한 결과도 반복문을 이용해 자릿수를 뒤집어 주었다. 구글링을 한 코드는 두 수를 Scanner로 int 형태 그대로 입력 받는다. 반복문을 이용해 숫자를 10으로 나눈 나머지를 차례로 열거하여 숫자를 뒤집어 준다. 해당 작업은 사실 반복되는 작업이..

카테고리 없음 2022.05.10

이벤트 발생 지점 주변의 CCTV 띄우기

KakaoMap API와 교통정보 API를 사용해 아래와 같은 프로그램을 만들어야 했다. 지도 위 CCTV가 존재하는 좌표에 마커가 생성되어 있다. 돌발 이벤트 발생 시 일정 범위내 존재하는 CCTV를 위의 이미지처럼 재생 시킨다. 구현 전, 아이디어만 떠올렸을때는 그냥 범위 지정만 해 주고 CCTV가 범위에 속하는지만 판단해 주면 되는 문제라 단순할 것이라 생각했다. 근데 막상 구현 하려 하니 좌표와 화면의 픽셀을 매칭시켜야 했고, 둘을 어떻게 매칭시켜줘야 할지 떠오르지 않았다. 좌표는 좌표고.. 지정 범위는(width/height) 픽셀이고... 어떻게 해야하지? 지도 위 두 좌표 사이 거리를 임의로 지정해서 픽셀을 맞춰줘야하나? 그게 가능할까? 그리고 만약 그게 가능하다 치더라도 지도의 줌아웃/줌인..

JAVA의 자료구조 (JAVA Collection Framework)

자료구조와 Collection Framework? 자료구조란 Data의 집합을 의미하며 컴퓨터가 데이터를 효율적으로 처리하기 위해 만든 구조이다. Collection Framework는 이러한 자료구조를 표준화된 방법으로 제공 가능하게 하는 클래스의 집합이다. Collection Framework는 대표적으로 List, Set, Map이 있으며 아래와 같은 구조를 가지고 있다. List, Set, Map은 기본형(primitive) 데이터의 저장이 불가능하고 참조형(reference) 데이터만 저장 가능하다. 만약 기본형 데이터를 저장하고 싶다? 그럼 Wrapper클래스를 사용하면 된다. 예) int 대신 Integer클래스, boolean 대신 Boolean 클래스 사용. 해당 글에서는 Collecti..

[백준] 8595번: 히든 넘버 - JAVA

문제 보기 문제 분석 [요약] 문자열 하나가 주어진다. 주어진 문자열 사이 사이에 존재하는 숫자를 찾아 모두 더하여 출력한다. [푸는 과정] 오랜만에 한 시간 넘게 잡고 있던 알고리즘 문제다. 왜냐하면... 지금부터 썰을 풀어볼 것이다. //문제를 대충 읽었어요.. 처음에는 그냥 모든 숫자를 일의자리 숫자 취급하여 더해버렸다(문제를 제대로 읽자..ㅎ). 당연히 오답. 자세히 살펴보니 붙어있는 숫자는 하나의 숫자 취급을 해 주어야 한다. 예를 들어 'a555d222f6d5s1'이라는 문자열에 숨어있는 숫자는 '555', '222', 6', '5', '1' 이 되고 555+222+6+5+1 = 789가 정답이 된다. //로직이 틀렸어요.. 이제 문제를 제대로 파악했으니 코드를 짜 본다. 또 오답이다. 이건 ..

[백준] 9536번: 여우는 어떻게 울지? - JAVA

문제 보기 문제 분석 [요약] 주어진 케이스 별로 1)첫 번째 줄 : 녹음기에 담긴 모든 울음소리, 2)두 번째 줄~'What does the fox say'이전 까지의 줄 : 각 동물의 울음소리 이다. 1번 문장을 2번에서 언급한 동물의 울음소리를 제외하여 출력한다. [푸는 과정] 각 동물의 울음소리를 " goes "로 잘라내서 HashTable에 담고 차례대로 'replace()'를 써서 해당 울음소리를 모두 ''로 바꾼 뒤 출력하는 방법이 바로 떠올랐다. 그런데 여기서 문제 발생. 예제의 'seal'은 'ow'소리를 내며 울고 모든 동물 울음소리를 담은 문장에 'pow'가 포함되어 있다. 그래서 만약 'replace("ow", "");'를 쓴다면 'pow'라는 단어가 'p'로 변해버린다. 그래서 다..

[백준] 16953번: A -> B - JAVA

문제 보기 문제 분석 [요약] 주어진 연산을 최소로 사용해 input의 왼쪽 숫자를 오른쪽의 숫자로 만들기. [푸는 과정] 처음에 눈에 들어오는 글자만 잠깐 훑었을때는 DP인가 싶었는데 아니었다. 숫자를 공책에 한 번 써보니 풀이 과정은 금방 그려졌다. 문제는 왼쪽숫자 → 오른쪽숫자 지만, 사실 반대로 생각하면 된다. 오른쪽 숫자를 왼쪽 숫자로 만들어 보면 된다. 우선 두 가지 경우의 수를 둔다. 1)숫자의 1의자리가 '1'로 끝날때 : 1의자리 숫자를 떼어낸다. 2)아닐때 : 2로 나누어 진다면 2로 나누기, 아니라면 연산을 종료하고 -1출력하기. 두 가지를 왼쪽숫자가 될 때까지 반복하면 된다. 코드 보기 import java.io.*; public class Main { public static vo..

카테고리 없음 2022.04.02

[백준] 11497번: 통나무 건너뛰기 - JAVA

문제 보기 문제 분석 [요약] 다양한 높이의 통나무를 원형으로 세웠을 때 높이 차이가 가장 적도록 배치하기. [푸는 과정] 우선 숫자의 최소 혹은 최대를 구하는 문제기 때문에 '정렬'이 필요 하겠다. 정렬이 쉽도록 배열을 선택할 것이다. 각 숫자의 차이가 가장 적도록 배치하려면 우선 가장 큰수를 중간에 배치 하고 남은 숫자들을 양 옆으로 내림차순 배치를 하면 되겠다. input용 배열 하나(=numbers), 통나무 정렬용 배열(=logs) 하나로 총 두 개의 배열을 사용 할 것이다. 이제 나란히 놓인 두 숫자의 차 중 가장 큰 차를 구해야 한다. 혹시 모를 시간초과 방지를 위해 통나무를 정렬하면서 Math.max()함수를 이용해 두 수의 최대 차를 구할 것이다. 코드 보기 import java.io.*..