Queue - 3문제
백준 - 인사성 밝은 곰곰이
Hash - 1문제 / Queue - 1문제 / Stack - 1문제
Implement - 1문제
Sort - 1문제 (해결중) / Greedy - 1문제
문제설명 해결방안 (1) 배열의 각 문자열의 n번째 인덱스의 문자를 문자열 앞에 붙여 오름차순 정렬 후 비교한 문자를 빼고 나머지 문자열로 이루어진 배열 반환하자 코드 내 코드 설명 (1) 정렬하기 위한 list 를 만들고 매개변수로 넘어온 strings의 각 문
(1) 매개변수 num_list 를 리스트 객체에 넣고 오름차순 정렬 후 리스트의 0~4인덱스값 삽입학원 첫 날이라 다른 거 못풀었다 ..
(1) 홀수/짝수 각각 문자열로 바꿔 이어붙이고 두 개의 문자열을 더한다.쉬는중..
(1) list 선언 후 만약 인덱스 % n == 0 이라면 리스트에 num_list인덱스 값 추가 (2) 리스트값 배열에 삽입2Lv 풀다 쉬는중..
(1) 가능한 접두사를 모두 list 에 저장하여 매개변수 접두사가 포함되어 있는지 확인했다.Lv2 풀다가 힘들어서 잠깐 쉬러왔다..
(1) 첫 번째로 매개변수 문자열 s의 {'','{','(',')','}',''}; 각각 하나씩은 들어가있는지 체크해줬다. 만약 없는 문자가 있다면 절대 유효한 괄호가 될 수 없기 때문에 바론 0을 리턴(2) 위 과정을 통과했다면 각 자리의 문자를 카운트하여 만약 유
(1) 스택 객체 st 에 매개변수 arr 각 값을 넣어준다.(2) 스택 객체 st 에서 pop() 메소드를 활용하여 두 개씩 꺼내 최소공배수를 구하고 다시 그 최소공배수를 스택 객체 st에 push() (3) 이 과정을 반복하여 마지막에 남은 1개의 값이 N개의 숫자
(1) B참가자의 번호가 앞에 있을 수 있으니 비교하여 작은 수가 A참가자의 번호가 될 수 있게 해준다.(2) 만약 A참가자의 번호가 홀수이고 B참가자의 번호 -1 = A 를 만족한다면 두 참가자가 만났음을 뜻하므로 cnt++ 해주고 종료(3) 그렇지 않다면 위 조건을
(1) 주어진 자연수 n부터 차례로 홀수라면 건전지 1개를 추가 하고 n-1 하여 짝수로 만들고 이 작업을 반복해주었다.확실히 생각하는 게 많이 늘었다.. 쓰면서 출제의도를 파악하자!
(1) 비교하기위한 스택 객체 st 선언, 불렀던 단어인지 포함여부를 확인하기 위한 리스트 객체 선언첫 번째는 무조건 불렸기 때문에 words0 단어는 먼저 리스트에 추가, 각 사람의 순번에 따른 횟수를 체크하기위한 h 배열 선언(2) 첫 번째는 무조건 한 번 부르기
(1) 가로와 높이는 무조건 3부터 가능하다. 양쪽으로 +1 씩 있기 때문에(2) 이를 보장하기 위해 for 반복문의 조건을 sum / 2 로 해주었고 안쪽 타일의 가로 길이는 sum / 세로이기 때문에 반복중 ( 가로의 길이 -2 ) \* (세로의 길이 -2) ==
(1) 문자열의 길이가 == 1 즉, 한 문자라면 어차피 짝이 될 수 없으니 0을 return ;(2) Character 타입으로 제네릭 지정하여 스택 객체 st 선언(3) for-each 구문을 활용하여 char c 에 각 자리의 알파벳을 넣고 스택 객체가 비어있지
(1) 생각한 경우의 수'(' 를 만나면 cn1++ 를 ')' 를 만나면 cnt1-- 를 해서 만약 cnt1이 음수가 된다면 false를 반환만약 위 과정을 거치고 '(' 개수 cnt2 와 ')' 개수 cnt3의 개수가 같지 않다면 false를위 두 가지 과정을 모두
(1) 여분이 있는 학생의 앞번호와 뒷번호를 구해서 빌려줄 수 있는 학생이면 카운트 더하자(1) 각 배열 두 개를 리스트에 추가하여 오름차순 정렬해준다.(2) 여분의 학생 앞 뒷 번호를 구해 분실 학생의 번호가 있다면 수업을 들을 수 있는 학생의 수를 증가시키자.처음
(1) 해시맵을 사용하여 시간복잡도를 해결하고 알맞게 순회하여 완주하지 못한 선수를 찾자(1) 해시맵을 사용하여 참여자 선수와 동명이인이 있을 수 있으니 value 값에 리스트 타입으로 불린만큼 add 해줬다.(2) 완주한 선수만큼 반복문을 체크하여 value 값에 해
(1) 체크할 문자의 개수와 다른 문자의 개수가 같아지면 그때 카운트 하자.(1) 체크할 문자의 개수와 다른 문자의 개수를 체크하여 answer 결과를 증가시켰다.(2) 주어진 문자열의 길이가 홀수일 때와 짝수일 때를 생각하여 증가시켰다.(1) 나와 같이 개수를 비교하
(1) n까지의 숫자중 소수를 찾자 (1) 2 ~ i의 제곱근까지의 숫자중 1을 제외한 다른 약수를 가질 경우 노카운트(2) 1만을 약수로 가질 경우만 카운트 하였다.(1) 느낀점에서 설명.. 시간복잡도 문제가 가장 어려운 것 같다.. 에라토스테레스의 체 라는 방법이
(1) 조합만 다르다면 합이 같아도 카운트 되므로 반복문을 돌려서 나오는 경우의 수 리스트에 넣고 소수 판별하자(1) 3중 for문을 통해 각 자리에 해당하는 세 가지 조합을 모두 리스트에 추가(2) 추가한 리스트에서 소수 판별하여 1과 자기자신만을 약수로 가질 경우
(1) DATE 클래스에 getDay() 메소드를 활용하여일요일 - 0 월요일 - 1화요일 - 2수요일 - 3목요일 - 4금요일 - 5토요일 - 6반환값을 이용하여 배열 String \[] week = {"SUN","MON","TUE","WED","THU","FRI",
(1) 1번 선수의 문자열은 결승점인 0 앞에 해당하는 문자열 먼저 조건에 해당하게 만들고 2번 선수는 앞에 문자열만 뒤집어 주면 될 것이다. 그 후 0 뒤에 2번 선수의 문자열을 붙이면 해결(1) 1번 선수의 문자열을 구할 변수 first, 나중에 2번 선수의 문자열
백준 - 암기왕 ( 2776번, JAVA )
백준 - 비밀번호 찾기( 17219번, JAVA )
백준 - 대칭 차집합( 1269번, JAVA )
백준 - 좋은 단어( 3989번, JAVA )
백준 - Project Teams( 20044번, JAVA )
백준 - 라디오( 3135번, JAVA )
백준 - 팔( 1105번, JAVA )
Greedy - 1문제 , Stack - 1문제
Greedy - 1문제
Math -1문제
Math - 2문제
Queue - 1문제
Gold 5 17% -> Gold 5 22%Greedy - 1문제
Stack - 4문제 / Hash - 3문제
Queue - 1문제 / Hash - 1문제
Greedy - 2문제
Queue - 2문제 / Stack - 1문제 / sort - 1문제 / Hash - 1문제
(1) 각 행의 한 줄씩 입력받아 배열과 리스트에 넣고 정렬 후 가장 작은 수를 두 번째 리스트에 저장 후 첫 번째 리스트는 초기화 -> 마지막 list2 정렬 후 마지막 가장 큰 수 출력했다.(1) 2중 포문을 활용하여 각 행의 최소값을 구하고 result 변수에 저
(1) 큰 수의 법칙은 가장 큰 수와 두 번째 큰 수를 구하고 각각의 구해야 하는 횟수를 구해서 더하면 된다고 생각했다.(1) 위 과정은 똑같았다. 근데 cnt += m % (k + 1); 이부분을 왜 해줘야하는지 생각하지 못했는데 m 이 (k+1) 로 나누어 떨어지지
내 코드 코드 설명 (1) 큰 거스름돈보다 거슬러줘야할 돈이 크다면 계속해서 반복되도록 했다. 솔루션 코드 코드 설명 (1) 큰 거스름돈보다 거슬러줘야할 돈이 크다면 계속해서 반복되도록 했다.
백준 - 붙임성 좋은 총총이 26069번
백준 - 이장님 초대 ( 9237번, JAVA ) - 그리디
백준 - 한 줄로 서기 ( 1138번, JAVA )
Greedy ( https://www.acmicpc.net/problem/1817 ) 풀이 사실 이문제는 그리디보다 스택 문제다. 문제에 "책은 탑처럼 차곡차곡 쌓여있기 때문에, 차례대로 박스에 넣을 수 밖에 없다" 이말이 곧 후입선출을 가리키는 스택을 의미하기 때문에
Greedy ( https://www.acmicpc.net/problem/20300 ) 풀이 n이 홀수 일 경우 (1) 정렬한 가장 마지막 수 == 가장 큰 수 (2) i번째 수와 n-2-i번째 수를 합하여 나온 조합 중 가장 큰 수 (3) 두 수를 비교하여 더 큰 수 n이 짝수 일 경우 (1) i번째 수와 n-1-i번째 수를 합하여 나온 조합 중 가장...
Stack ( https://www.acmicpc.net/problem/28278 ) 풀이 사실 이문제는 스택 메소드를 사용해보라는거고 중요한건 시간초과를 해결하는거다. 내가 선택한 방법은 System.out.println() 보다 StringBuilder를 통해 문자열을 만들고 한 번의 System.out.println() 통해 출력했다. 스택부터 다시...
Stack ( https://www.acmicpc.net/problem/17952 ) 풀이 (1) 점수와 남은 시간을 담을 클래스를 만들었다. (2) 만약 남은시간이 1이라면 해당 시간을 사용해서 과제를 끝낼 수 있으니까 점수를 더해준다. (3) 그런게 아니라면 Stack에 시간을 -1 한 상태로 다시 저장 자꾸 95%에서 틀렸습니다가 떠서 뭐가 문제인...
BruteForce ( https://www.acmicpc.net/problem/1436 ) 풀이 브루트포스 알고리즘이니까 노다가로 찾자 -> 가장 첫 번째는 666이니까 666부터 만약 666이 들어간다면 cnt를 증가시켜주고 만약 cnt와 n이 같아진다면 마지막에 +1 이 됐으니 출력은 -1로 출력
BruteForce ( https://www.acmicpc.net/problem/7568 ) 풀이 브루트포스 알고리즘으로 자기 1등부터 시작하여 자기자신보다 문제에 나온 조건에 해당하는 덩치가 더 큰 사람이 있으면 등수를 하나씩 늘린다. 천천히 다시 달려보자
Stack ( https://www.acmicpc.net/problem/17298 ) 풀이 문제가 인덱스와 스택을 잘 활용해야했다.. 3, 5, 2, 7을 기준으로 예를 들어보자 -> 3에 해당하는 인덱스 0을 스택에 저장 -> 스택에 상단 인덱스에 해당하는 값이 현재 기준이 되는 값보다 작다면 -> 인덱스 스택[0] = 3 < arr[1] = 5 조...
Greedy ( https://www.acmicpc.net/problem/13417 ) 풀이 Deque ( 데크, 덱 ) 의 성질을 이용하면 정말 쉬운 문제였다 .. Deque는 값을 앞에 넣을수도 뒤에 넣을수도 있는 메소드를 갖고 있다. 들어오는 문자를 마지막 문자와 비교해서 더 작다면 가장 앞으로 , 더 크다면 가장 뒤로 보냈다
Greedy ( https://www.acmicpc.net/problem/1141 ) 풀이 길이순으로 오름차순 정렬 후 startWith 활용해서 접두사 체크
Stack ( https://www.acmicpc.net/problem/11899 ) 풀이 만약 스택이 비어있는데 ")" 가 먼저 온다면 왼쪽부분 미완성 카운트+1 "(" 여는 괄호가 온다면 스택에 push 만약 스택에 최상단이 여는 괄호이고 다음 오는 괄호가 닫는 괄호라면 괄호 완성해서 스택에서 빼내기 여는 괄호가 온다면 그대로 스택에 push 마지막으...
Greedy ( https://www.acmicpc.net/problem/1744 ) 풀이 양수는 오름차순 우선순위큐 / 음수는 내림차순 우선순위큐 선언 둘 다 a와b로 짝을 지어서 곱했을때와 더했을 때를 비교해서 sum에 더해줬다. 또 둘 다 남은 수들에 대해서 비교를 해줘야하기 때문에 리스트 선언해서 남은 값들에 대해서도 비교해서 sum에 더하기
stack ( https://www.acmicpc.net/problem/2493 ) 풀이 나는 스택을 활용하기때문에 뒤에서부터 찾아야한다는 생각이 강했다 ... 다른 사람의 풀이를 보았더니 역시 알고리즘 고수들이 많다... 열심히 하자 먼저 스택에 현재 (탑의 번호, 높이) 를 저장해준다. 그리고 입력받은 현재 탑의 높이보다 스택에 큰 값이 있다면 그때의...
PriorityQueue ( https://www.acmicpc.net/problem/1927 ) 풀이 조건에 따른 우선순위큐 가장 기초적인 문제
PriorityQueue ( https://www.acmicpc.net/problem/11279 ) 풀이 최소 힙과 반대로 큰 수부터 뽑는 우선순위큐 기본 문제
sort ( https://www.acmicpc.net/problem/1092 ) 풀이 담을 수 있는 가장 큰 박스부터 큰 크레인에 실어야하니까 둘 다 내림차순 정렬로 데이터를 넣고 한바퀴 돌릴때마다 answer++ 해줬다. 정렬만 하면 쉬운 문제 😮
일반 배열, 정렬된 배열을 통해 hashMap에 순서를 저장하고 일반 배열에 값에 맞는 value를 찾으면 된다. 중요한점은 val가 아닐때 i로 주면 i는 순차적으로 증가하기 때문에 꼭 넣고 난 후 다음 순번을 저장할 cnt를 지정해줘야한다는것 !
먼저 Scanner를 사용해서 우선순위큐를 2개 만들어서 내림차순, 오름차순으로 뽑아 마지막에 각각 하나씩 출력해줬다. 근데 풀면서 골드인데 너무 간단한데...? 이런 생각이 들어서 제출해보니 역시 시간초과 뜨고 혹시 입력을 Scanner말고 버퍼더 리더 쓰면 해결이
세장의 카드를 고르기 때문에 각 반복문의 고르는 조건을 고려하면 되는 문제 지금 코드처럼 정렬을 하고 고르면 훨씬 더 빨리 찾을거라고 생각했는데 정렬을 하지 않고 해도 비슷한 시간이 걸렸다. 조건에 유의하자
가장 먼 곳의 위치에 있는 책은 갔다가 돌아올 필요가 없기때문에 마지막에 왕복거리에서 빼줄 num을 구한다.한 번에 들 수 있는 책의 개수 m만큼 반복하며 우선순위큐에서 수를 제거하지만 m권중 가장 먼곳에 있는 값만 answer에 왕복 거리를 추가
이전에 못풀었던 문제인데 다시 풀어보았다.. 근데 진짜 마의 16%에서 계속 오류가 떴다😂마의 16%를 해결하니 시간초과가 떴다. 이유는 나는 원래 deque를 비워버리고 거꾸로 된 배열을 넣어주고 거기서 반복을 돌려 답을 구했었다. 이걸 해결하기 위해 반대로 뽑는
거의 구현문제에 가까운 문제라서 각각 차를 구해서 최소가 되는값이 정답
문제에서 1000보다 작은수라 했으니 3자리의 각자리를 구해서 뒷수 - 앞수 ( 공차 ) 두개를 비교해서 같다면 같은 공차로된 수열 - 수학 문제를 많이 풀어보자
가장 작은 티셔츠의 합이 되려면 결국 서있는 인접한 사람들의 키차이를 구하고 k개의 조만큼 만들었을때 최소가 되려면 키차이를 내림차순으로 정렬하고 우선순위 큐에서 k-1만큼 빼주면 된다. 한 조건의 대한 수열을 구하고 그때 최적의 해를 찾아야한다는거 기억하자
이진탐색문제를 확실히 알아놔야 할 것 같아서 풀어보게됐다.. 근데 확실히 이진탐색은 익숙하지 않아서 어려웠다 😭 우선 이문제에서 그랬듯 "찾으려고 하는 값", "최소값", "최대값" 이렇게 세가지에 집중해서 다른 문제도 풀어보자먼저 가장 찾으려는 값의 최소값인 lef
투 포인터 알고리즘을 사용하자 투 포인터 알고리즘이란 각각의 포인터를 주고 조건에 따라 인덱스를 증가시켜 원하는 값을 찾는 것 이라고 생각하면 쉽다. 비교할 두개의 인덱스 i와 j 를 선언하고 만약 두 인덱스 값의 차이가 m보다 작다면 비교할 대상의 큰 수 i인덱스를
두 포인터이기 때문에 시작점과 끝점을 i, j 로 놨다.이후 부분합이 목표 합인 s보다 작은 경우 부분합을 늘려주면서 끝점을 증가 시켜준다.만약 부분합이 목표합고가 같거나 더 크다면 끝점과 시작점의 길이를 구해주고 부분합을 시작점에 값만 빼주고 시작점을 증가시킨다.처음
(1) 먼저 합계의 최소값을 구해야하니까 배열 오름차순 정렬(2) 각 저울에 올릴 수 있는 값을 합하면서 +1 무게는 올릴 수 없긱에 if( sum +1 < arri ) 로 값을 비교 (3) 이문제가 왜 골드2인지 모르겠다..
문제를 이해하는데 시간이 좀 걸렸다.. 😂스트링으로 받은 char(i) 가 ( 이면 ( 개수를 증가시키기위해 cnt\*2 + 스택에 ( 저장스트링으로 받은 char(i) 가 \[ 이면 \[ 개수를 증가시키기위해 cnt\*3 + 스택에 \[ 저장 만약 char(i
이제 DFS / BFS 문제를 피하지말자 🚀DFS 즉, 깊이우선 한놈만 판다라고 생각하자 보통 스택과 재귀함수를 활용해 푼다. 나는 재귀함수를 썼다.시작점을 알려줬으니 start를 먼저 방문체크 / start에 연결된 정점을 찾아서 만약 방문하지 않았다면 그놈 또 들