자바는 Scanner와 System.out.println()을 사용해서 콘솔 입출력을 처리할수 있지만 속도가 너무 느리다.그렇기에 빠른 입출력을 원한 경우 버퍼를 사용하는 BufferReader와 BufferWrite를 사용해야 한다.버퍼란?일시적으로 데이터를 저장하는

처음에는 입력한 숫자 10개를 저장한 배열을 만든뒤 for문을 이용해서 배열의 요소 하나를 다른 배열의 요소들과 비교하고 감지하는 코드를 작성하려 했으나 실패했다.자기 자신을 제외하고 다른 요소들과 비교할 방법이 떠오르지 않았다.그래서 boolean 배열을 이용하는 방

간단하다.System.in으로 받아들인걸 int형으로 저장한다.이렇게 되면 입력값들이 전부 아스키코드 값으로 저장된다.

평소 풀듯이 푸는 방법과 getBytes를 사용해서 푸는 방법 두개가 있다.chaAt()를 활영해서 푼 코드.반드시 -'0'을 해줘야 원래 숫자를 알수 있다.getBytes() 메서드는 String에 있는 메서드라 따로 import 해줄 필요는 없다.getBytes()

실패했고 다른 풀이방법을 생각해봤다.알파벳 소문자 개수만큼의 배열을 선언하는게 핵심이었다.

핵심은 switc-case문을 사용하는것,모든 숫자의 합을 물어보는 문제라는것,숫자는 3에서부터 시작한다는것

while(str=br.readLine()!=null){}이 코드가 중요하다.br.readLine()은 입력값이 없으면 null을 반환한다.readLine()를 반드시 while문 안에 넣어줘야 입력값을 계속해서 받는다.

오늘 날짜를 가져오는 간단한 문제이다.출력 형식만 지정해주면 된다.time.LocalDate에서 now() 메서드르 현재 날짜를 가져온다.그 다음 time.format.DateTimeFormatter을 통해서 출력 형식을 지정해준다.그 후 LocalDate 클래스의 f

입력하는 숫자만큼의 다차원 행렬을 만들어서 더해야하는 문제이다.어떻게 행렬 두개를 선언하고 그걸 더하지?라는 생각에 겁을 먹었었는데 생각보다 쉬웠다.그냥 for문으로 반복을 두번 돌리고,처음에 만든 행렬에 뒤에 입력한 값을 맞춰서 더하면 그게 행렬 두개를 더한거다.
String.charAt()의 반환값은 해당 문자의 유니코드 숫자 값이다.그렇기에 String.charAt()의 값과 숫자를 비교해주고 싶다면 '반드시' 숫자에 '0'을 더해야 한다.int형 숫자와 char가 연산을 할 시 char는 int형으로 바껴서 계산된다.이 때

코드를 작성하고 이해하는데 3일정도 걸렸다.체스판이 w로 시작하는 경우와 b로 시작하는 경우 두개로 나뉜다.w 칠하는 개수와 b 칠하는 개수의 합은 언제나 체스판 가로\*세로와 같다.그렇기에 w,b 둘중 하나만 구하면 나머지를 구할수 있다.코드의 구조는 이렇다.row,

호수의 앞자리수는 number%height.number%height가 0이 나올 경우 층수가 0이 되버리므로 이 때는 height를 넣어주자.100을 곱해야 한다.xxyy이런 형태니까호수의 뒷자리는 number/height+1의 값과 같다.단,number%height가
브루트 포스란?무식하게 모든 값들을 하나 하나 전부 다 시도해보면서 답을 찾는것.노가다라 보면 된다고 이해했다.이건 정답 코드다.주석을 최대한 자세하게 달아놨으니 읽어보자.브루트포스 자체보다 생성자를 어떻게 찾는지 몰라서 좀 애먹었다.while문 안의 자리값 전부 더하

브루트포스 문제다.모든 카드 경우의 수를 따져봐야 한다.search 메서드가 핵심이다.for문 3개를 돌려서 모든 경우의 수를 다 조합하는게 중요하다.뽑는 카드가 3장이라 3중 for문이며 3장이기에 2를 뺀다.카드 3장을 더한 값이 result보다 크고 sum보다 같

모듈로 연산이 뭔지 몰라서 애먹었다.모듈로 연산은 그냥 나머지 연산이라 이해하면 된다.%%문제에서 보면 M으로 모듈로 연산을 하라고 나와있다.왜 나머지 연산을 하는데 답이 맞다고 나오는거지?하고 의문을 가졌었는데 그냥 문제에 그러라고 나와있는거였다 좀 허무하다.모듈로

range는 칸의 개수이다.1은 따로 뺐으니까 2부터 시작한다.

최대공약수와 최소공배수를 구하는 문제이다.최대공약수는 a를 b로 나머지 연산하고,나온 나머지를 다시 b에 나머지 연산한다.그걸 다시 a에 나머지 연산하고....이 과정을 반복하다 나머지가 0이 나올시 0이 나오게한 나머지 연산 숫자가 최대공약수이다.그리고 a와 b를 곱

for(int i=1;i<15;i++){ for(int j=1;j<15;j++){ for(int k=1;k<=j;k++){ arri = arri+arri-1;

부르트포스 문제이다.한번 코드를 짜고나면 이해가 쉬운데 처음에 짜는게 어려운거 같다.contains() 메서드는 String에 특정 String이 포함되어있는지 유무를 true false로 반환한ㄷ.count는 이 숫자가 몇번째 숫자인지 감지하는 변수로,내가 입력한 숫

이항계수를 구하는 문제이다이항계수를 구하는 공식이다.팩토리얼을 계산해주는 함수를 만든 뒤 공식에 넣어주기만 하면 된다.팩토리얼을 코드로 구현해줬다.

Queue를 사용해야 하는 문제였다!queue를 처음 사용해봐서 애먹었지만 마지막 출력이 까다로운걸 빼면 그렇게 어려운 문제는 아니었다.큐에 입력값을 전부 넣어놓은 뒤,출력할 데이터 전까지 데이터를 빼내고 다시 뒤로 넣는 작업을 반복한다(add,poll)그 뒤 데이터를

대놓고 큐를 사용하라고 알려주는 문제이다.까다롭게 시간 제한이 달려있어서 반드시 buffer를 사용해야 한다.입력값의 push x 저거 때문에 머리 터지는줄 알았다.이래저래 해보고 내린 결론은,push고 뭐고가 중요한게 아니고 '공백'이 들어가냐 아니냐가 핵심이었다.i

큐 문제와 거의 동일한 문제이다.입력은 buffer로 출력은 println으로 처리했다.속도를 높이려고 출력도 buffer를 사용해봤다.근데 이랬더니 시간초과가 뜬다.당황스럽다.아니 근데 또 한번 더 돌리니까 시간초과 안 뜨네당황스럽다...시간은 출력도 buffer 쓴

스택을 구현하는 문제이다.스택 또한 자바에서 제공한다.딱히 어려운건 없었다.
String의 contains메서드를 사용하면 되지 않을까?생각하고 코드를 짰다. 코드를 돌려보면 문제에서 의도한대로 작동하기는 한다.하지만 제출하면 시간초과가 뜬다...contains 메서드가 성능이 떨어져서 그런거 같다.

소수라길래 긴장했는데 별거 아니었다.소수는 나누어지는 수가 1과 자기 자신밖에 없는 수이다.1이 소수가 아니며 2가 소수라는것만 신경써서 하자

괜히 어려운 방법 사용해가면서 애먹다가 큐로 쉽게 풀었다.분명 큐에 대해서 공부했는데 막상 다시 써먹을라니까 잘 모르겠더라.큐는 선입선출 데이터 구조이다.무조건 먼저 들어온게 먼저 나가게 된다.이렇게 생겼다.가장 아래를 날려주고 그 다음거를 제거한뒤 위로 올려주는 과정

종전의 이진탐색 문제보다 신경쓸게 많다.전 문제는 단순히 존재 유무만 따지면 됐기에 간단했지만 이번엔 중복 개수를 얻어내야 한다.lower upper 개념을 알고 있어야 한다. int up = arr.length; // 이 부분에서 애를 먹었다.처음에 up을 arr.

반드시 순서대로 넣어야하는 이진탐색이다.while(hi>=lo){9 31 2 3 4 5 6 7 8 9=을 안 붙이면 16이 나오고 붙이면 17이 나온다.16은 담을수 없으며 17은 담을수 있으니 17이 최소값이다.순서대로 넣을 때는 한번 더 검사해줘야 하나 보다
Scanner 사용할 때랑 구조가 조금 달라서 애먹었다.

그냥 String을 이용해서 풀수 있지 않을까?하고 삽질하다 결국 때려쳤다.스택을 이용하면 간단하게 풀수있다.스택이란 선입후출 구조의 자료형이다.Stack<자료형> stack = new Stack<자료형>() 이걸로 구현하면 된다.
이진탐색에 대해서 원리와 구현방법은 거의 다 이해했다.근데 = 유무랑 -1 할지 이런게 너무 헷갈린다.그래서 그냥 외우기로 했다.이진탐색의 마지막을 arr.length로 설정했을경우 while조건문에 =을 넣지 말아야하며 범위를 왼쪽으로 당길 때 mid에 +1을 하지
백준브루트포스에 가까운 문제였다
백준문제링크비교적 쉬운 문제였다.
백준문제링크2차원 배열 합 구하는 공식을 알고 있다면 어렵지 않은 문제이다.근데 공식이 자꾸 안 외워진다.
백준문제링크누적합 난이도 실버 5이길래 쉽겠거니~하고 들어갔다고 엄청 고생했다.문자열 반 나누고 양쪽합 구하는 코드가 생각이 안 나더라.난 알고리즘이 문제가 아니고 구현 능력이 너무 부족한거 같다.
백문문제링크이름이 구간합으로 되어있길래 구간합으로 풀리는 문제인줄 알았다문제의 입력 조건이 long형이라 int형으로는 풀수 없으며,for문이 이중으로 들어가서 연산횟수가 2억을 훨씬 넘어버린다.찾아보니 세그먼트트리라는걸 사용해야한다 하더라.아직 배우지 않은 내용이다.
백준문제링크Buffer builder 이차원 배열 사용한 코드클래스를 하나 만들어서 작성한 코드
백준문제링크문자열을 정렬하는 문제이다.sort의 comparator를 구현해주면 된다.
백준문제링크연속된 숫자의 합을 찾는 문제이다.투 포인터라는 알고리즘을 이용해서 풀면 된다.텍스트만 봤을 때는 어려웠으나 설명 영상을 한번 보니 간단하게 이해가 됐다.
백준문제링크이상한데서 엄청 애먹고 시간초과 뜬 문제다.왜 시간초과 떴는지는 지금도 모르겠다.시작과 끝에서 시작하는 투포인터 알고리즘으로 풀면 된다.주의할건 ,합하는 수에 자기 자신이 들어가면 안 된다는 것이다.수가 같아도 위치가 다르면 다른 숫자로 간주한다.그렇기에 반
백준문제링크슬라이딩 윈도우를 이용하여 푸는 문제이다.투 포인터와 알고리즘 자체는 거의 똑같다.이상한데서 엄청 애먹었다.for(int i=M;i<N;i++){ int j = i-M;요 코드가 잘 이해가 안 갔다.저렇게 하면 이미 검사한 첫번째 문자열을 또
백준문제링크주어지는 수가 굉장히 커서 정렬을 사용할수 없다.덱을 사용하면 숫자가 정렬되는 효과를 볼수 있다.
백준문제링크스택을 이용한 문제다.문제 설명이 상당히 난해하다.요약하면,스택에는 무조건 수를 1부터 차례대로 넣으며,스택을 넣고 빼고만 해서 주어진 수열을 만들수 있냐?가 문제다.적어놓고도 뭔 소린지 모르겠다.num은 pop을 한다고 작아지는게 아니라는걸 잊지 말자.nu
백준문제링크수가 크기에 정렬은 사용할수 없다.스택을 이용해서 문제를 풀어주자
백준문제링크우선순위 큐를 사용하면 간단하게 풀수 있다.우선순위 큐를 구현 할 때 정렬 조건을 반드시 줘야한다.