몸무게와 키의 한쌍으로 벡터에 넣는다for문으로 비교대상을 옮겨가며 키와 몸무게 둘다 크면 rank++1년전에 못푼 문제였는데 금방 해결했다. 😁
부족했던 점compare(사용자 정의) 함수에 대해 정의하는 부분sort를 사용하면 같은 값이 먼저 나오는 순서를 알기 어렵지만 stable_sort에서 정의를 해주면 순서를 정의할 수 있다.stable_sort로 정렬한다면 컨테이너의 앞의 원소(여기선 vector의
메모리 제한이 있으므로 숫자를 모두 입력받으면 초과가 발생문제점출력오류가 있었다.출력하는 부분에서 범위를 n까지 지정했었는데, 생각해보니 더 큰 숫자가 count되어 있을 수도 있기 때문에 최대치인 10000로 범위를 설정하였더니, 정답처리가 되었다.
맨 처음 pair 자료구조로 vector에 넣고 정렬하였는데, 시간초과가 발생함.2차원벡터로 문제해결!
BOJ 1920. 수 찾기 문제 코드
에라토스테네스의 체0으로 초기화된 배열에 배수의 값들을 1로 바꿔 소수만 판별해낼 수 있는 방법에라토스테네스의 체를 직접 구현하고,배열에 담긴 1 3 5 7 을 하나씩 비교하면서 소수라고 판별되면 cnt를 증가하는 방법으로 진행하였음에라토스테네스의 체 구현을 확실하게
최빈값 구하는 부분이 가장 핵심인것 같다.pair자료구조로 최빈값을 구할 수 있다는 것을 배웠다.처음에는 1차원 배열에서 2중for문으로 빈도수(?)를 구하려고 했으나 음수 처리하는 부분에서실패하였다..
맨 처음 제출했을 때는 , 메모리 초과 오류로 실패하였다.변수를 굳이 쓰지않고 push_back인자에 front를 바로 대입해서 해결.처음 시도했던 코드
스택을 사용하다가 벡터로 시도해봄모든 모양의 괄호를 하나씩 넣고, 바로 앞전에 괄호가 짝이 맞으면 pop, pop 하는 방식.이 과정을 모두 거쳐 벡터 크기가 0이면 yes 아니면 no를 출력한다.왼괄호만 넣고 오른쪽괄호가 나오면 비교해서 pop을 한번만 해도 된다.그
4949번 문제 복습 차원에서 풀어보았음.똑같은문제! 😁
괄호문제랑 똑같다(더 쉬운문제인것 같다 5분만에 해결!🙂)
숫자가 매우 크기 때문에, BF처럼 하면 시간초과가 날 것이라고 생각해 이분탐색으로 접근하기로 했다.이분탐색으로 원하는 값들을 찾아내는 것은 성공했다.하지만 , 원하는 값들이 하나 이상일 경우에 문제가 생겼는데, 이때, 같은 값들이 오른쪽에 없으면 검색을 왼쪽방향으로
BOJ 10826 스택 문제 코드
BOJ 10845. 큐 문제 코드
BOJ 10866. 덱(deque) 문제 코드
Runtime Error..이 방법으로 하면 하나하나 숫자를 세가며 탐색하기 때문에 오래걸린다.앞에 k-1 만큼의 요소를 뒤로 push하고 난 뒤의 맨 앞의 요소를 출력한다.배열, 벡터로 문제 풀려고 했기도 했고, 큐가 생각나기 까지 시간 엄청 걸렸던 문제...😨
스택에 순서대로 하나씩 넣고 이미 배열에 담긴 인덱스와 맨 위의 스택 값과 비교해 같으면 pop하는 방식.스택이 모두 비었으면 출력하고, 비어있지 않다면 불가능한 수열이므로 NO를 출력한다.
맨 처음 벡터로 접근하려다가 우선순위큐가 생각나서 priorityQueue로 문제를 풀었다.하지만 119111과 같은 경우에서 특정 인덱스에 대한 순서를 정확히 구하지 못했다.큐에도 pair구조를 넣어서 사용할 수 있다는 것을 알게되었다. 🙂
이분탐색에서 특정값이 제시되고 그 값을 찾는 원리를 알고 있었지만, 특정값이 제시되지 않는 상황에서 적절한 값을 찾아가는 이분탐색은 이해하기 어려웠다.랜선 자체를 나누는 일은 맞는데,기준을 무엇으로 하느냐가 고민거리였다.결국 각각의 랜선을 나눌 값들을 구하기 위한 탐색
가장 긴 나무의 길이를 기준으로 m과 같은 값이 될때 tree 값을 받아 출력하였다.
에라토스테네스의 체를 이용해 소수를 구하는 문제!
비트마스킹 정리| : OR& : AND^ : XOR~ : 반전(NOT)<< : Shift (왼쪽으로 이동)\>> : Shift (오른쪽으로 이동)정처기 공부할때 봤던건데, 그땐 이게 언제쓰일 수 있을까 몰랐었다. 찾아보니 DP에도 쓰일 수 있다고 한다.끝이
이분탐색 하기전에는 시간초과 에러가 발생하였다. N이 10만이므로해결책으로 이분탐색으로 통해 값들을 찾아나갔다.그리고 숫자만 입력되었을 경우에 대비해 v1벡터(string값만 들어있는)를 따로 만들어 바로 출력되게 하였다.
n,m은 500,0000 이하의 자연수이므로 이분탐색 방법을 사용했다.듣 배열, 보 배열, 정답배열을 만든 후, 일치하면 정답배열에 수와 해당하는 값을 push_back() 함
이전에 듣보잡 문제랑 같은 유형이다.
규칙성을 찾아보니 피보나치 수열이 나왔다.a는 0부터 시작해서 두번째는 1로 시작하는 수열,b는 1부터 시작하서 두번째도 1로 시작하는 피보나치 수열이다.각각 a따로 b따로 구해서 입력 숫자에 해당하는 피보나치 수를 출력하는 방법이다.DP가 어려워서... 가장 기초적인
시간초과..짝수의 숫자를 입력하면 세로길이가 증가하고,홀수의 숫자를 입력하면 가로길이가 증가한다.증가하는 길이는 바로 피보나치수의 누적 값만큼 늘어난다.늘어난 길이의 가로,세로 총 합 \* 2시간초과 오류 발생...현자타임.. 🤨
n + 1을 해준 이유 : 돌다리에서 다시 육지로 넘어가는 경우도 고려해야 한다.
Top-Down 방식DFS에서 메모이제이션을 활용하게 된다면 중복연산을 피할 수 있으므로 속도가 향상된다.BOTTOM -UP방식1번째 계단 오르는 경우의 수 : 1가지2번째 계단 오르는 경우의 수 : 2가지3번째 계단 경우의 수 : 3가지 ( 1 + 2 ) 1번째 계
문제 풀이 코드
BOJ9095 1,2,3 더하기 문제 코드
BOJ1463 1로 만들기 문제 코드
분할정복, 재귀문제라고 해서배열에서 분할정복할 경우 범위(사이즈), 체크를 꼭 해주어야겠다.
(headgear종류 수 + 1) \* (eyewear종류 수 + 1) - 1\+ 1은 그 의상을 입지 않은 경우임\- 1은 모두 입지 않을 경우동시에 일어나는 경우이므로 곱해준다. (곱의 법칙)key, value로 pair객체 형태로 이루어짐m.insert를 하기 위
int -> long long형 자료형으로 바꾸니 정답!long long형 배열 결과int형 배열 결과
#BJOJ17626 Four squares ##문제 코드
풀이pair자료형으로 벡터에 넣어주고,먼저 회의 끝나는 시간을 기준으로 오름차순 정렬한다.그리고 pair의 첫번째와 두번째 값을 비교해가면서 temp 값을 업데이트 해준다.
문제내 코드문자열 하나하나를 받을 벡터를 만든다. (int형 이니까 ascii코드로 받게 된다)내림차순으로 정렬하는 코드 \- sort(v.begin(), v.end(), greater<int>());다른사람의 코드char 자료형을 이용해 한글자씩 받는다
find의 return type은 iterator이므로 seoul.begin()값을 빼주어야 int형이 나온다.반복자 , 포인터처럼 보면 될듯예제문제에 대입해보면,
iterator 반복자를 이용해서 풀어봄vector요소를 없애는 eraser함수를 사용했다.이 함수는 요소를 삭제함과 동시에 다음 요소를 지정하기 때문에, 그냥 지우면 한다리 건너뛰게 되므로 이를 방지하기 위해 iter--를 해줌.배열이 비어있으면 -1을 push_ba
substr(시작 위치, 시작위치부터 몇개?)
문제 코드1 ( 자릿수 나누는 반복문 ) 코드2 ( string으로 바꿔서 ) #include using namespace std; int solution(int n) { int answer = 0; string temp = to_string(n); for (int i = 0; i < temp.size(); i++) {...
처음 int형으로 했을 때, segmentation 오류가 나서 long long형으로 바꾸니까 정답이 됨.근데, 너무너무너무 느리다.sqrt를 활용해봐야겠다.
unique() : 중복된 요소들을 맨 뒤 (쓰레기 값)로 보내버림이때, 리턴되는 값은 그 쓰레기들중 맨 첫번째가 리턴된다.erase() : 그 쓰레기값중 첫번째부터 끝까지의 요소에 해당되는 값들을 지워버림
compare함수로 정렬 기준을 편집한다.맨 처음 시도 했던 것 : pair형으로 접근함 <string,char> 그 후, 두번째, char 를 기준으로 정렬compare함수를 custom하는 걸 잘 몰랐는데,
Queue 자료구조를 이용해봄.cnt는 인덱스 번호,빠져나갈때, 대문자면 그대로 v에 push하고 pop된다.소문자면 +32 (소문자로) 아니면 -32 (대문자로) 변경한다.
문제 코드
문제 코드
최솟값을 찾아주는 min_element얘는 반복자 주소까지 같이 리턴해주기 때문에 바로 erase도 같이 사용할 수 있다.
문제 코드
string으로 sort해도 되는거였다..
일단 오름차순으로 정렬 후 ,budget보다 크면 맨 뒤에부터 차례대로 빼면서 벡터를 삭제시킨다.최종으로 남은 벡터의 요소 수가 예산을 할당 받을 수 있는 팀원 수.
단순히 sort() 메서드만 사용했었다가, 기준설정 후 정렬하려니 당황스러웠다. n 번째 인덱스를 참조해서 정렬하고, 다시 합치고,... 그러다가 Array MDN문서를 참조하고 콜백함수로 기준을 설정해 정렬하는 방법이 나와있었다.localeComapre()라는 메서드
모두 소문자로 변경 후, filter하고, 각각 변수의 길이가 같으면 true 아니면 false 반환다른사람의 코드하나씩 소거(split)하는 방식인듯 하다. 소거하고 남는 부분의 길이를 비교 대칭이면 같을것임..
다음 요소랑 같은 값이면 continue 아니면 push()filter메서드를 사용. filter 콜백함수 scope의 변수 말고 scope밖의 변수(arr) 과 비교
문자열들을 split으로 하나씩 쪼갠 배열을 map으로 숫자범위의 ascii코드로 판별참고) 문자열 s의 길이가 4 혹은 6이고, --> 4이상 6이하가 아님. 4 아니면 6이라는 의미5번 6번 테스트에서 계속 오류난 이유..😡.
string을 split.toAscii 배열에 ascii코드로 변환(charCodeAt)된 코드를 push문제 조건에 따라 ascii --> String으로 변환(fromCharCode) 후 result 배열에 pushjoin
주어진 수의 반까지만 더하면 1부터 약수의 합을 더할 수 있다.왜 절반이냐 ? 절반 이상의 값으로 나누면 1이상이 될 수 없고 무조건 0임.절반이기 때문에 마지막에 주어진 수 (n)을 더해줘야 정답이 됨.
0으로 모두 채우고2부터 시작해서 2의 배수들만 -1(소수아님)로 n까지 채운다.에라토스테네스의 채
기존 배열 변형하지 않기 위해 slice사용 , splice는 기존 배열을 변형정렬 기준 함수가 없으면 유니코드로 정렬됨.
1의자리 숫자로 내림차순 정렬 후 join 시도 --> 같은 숫자일 경우 처리하기 어려움"30" + "3" => "303""3" + "30" => "330"위와 같은 원리를 이용 ((b + a) - (a + b))
요약 : 2진법으로 변환한 값에서 1과 1사이에 0의 최대 갯수를 구해라2진수로 변환.탐색하는 pivot으로 1이있으면 cnt를 0으로 초기화 ( checkAva : 문제 조건에서 1로 닫힌 이진수가 없으면 무조건 0을 반환해야 하므로 닫힘여부를 판단)0이면 piv
combination으로 2가지 가능한 조합을 뽑아서 모두 더하려 했으나,, 100이하의 숫자로 비교적 작은단위라 for문으로 돌림for문으로 배열안에서 하나씩 더하고 pushsort 오름차순 정렬중복제거를 위해 Set 객체를 불러옴.
정규표현식
function solution(participant, completion) { participant.sort() //참가자 배열 정렬 completion.sort() //완주자 배열 정렬 for (var i = 0; i < participant.length; i++) { if (participant[i] !== completion[i...
내 코드
이렇게 했더니 런타임오류가 발생한다..Set으로 아예 변수를 지정해놓고 add 하면 중복이 제거되면서 추가되나보다..중복이 제거된 size의 값으로 값을 구하면 된다
내 코드
하..🤦🏻♂️
내 코드 똑같은 단어가 뒤에 또 나오는 경우에 대비하기 위해 for문을 한번 더 사용함. replace를 사용해서 숫자(index)로 바꾸기를 반복함 다른사람의 코드 위의 글자 기준으로 split하고 split된 index를 그대로 answer에 join함 s
내 코드
내 코드
주어진 문자열을 숫자기준, 문자기준으로 각각 split하고 공백을 제거각각의 인덱스값에 알맞은 연산을 해준다.
내 코드
답은 맞았지만 효율성 테스트에서 실패가 나옴..string 처리때문에 그런것같다..
내 코드로또번호 2개 모두 sort()로또번호가 같은 것들을 cntSame++0(지워진 숫자)을 cnt0++최저순위는 cntSame의 수, 최고순위는 0의 갯수까지 더한 수 (cnt0 + cntSame)가 된다. ( 0이 모두 win_nums의 요소가 된다고 가정하면
1,4,7,\* 인 경우 무조건 'L'을 추가3,6,9,3. 키패드 가운데인 경우 target번호인 numbersi, 현재 누르고 있는 left,right,같을 경우 반환에 필요한 값인 hand들을dist\`함수에 매개변수로 넣는다.매개변수 각각의 인덱스를 구하고, (
내 코드
내 코드
절반길이 범위까지만 구하고,substr을 이용해서 비교할 글자를 가져온다.하나하나 비교하면서 같은 글자의 숫자를 str 변수에 붙인다.
내 코드
각 배열을 크로스로 곱해 더하면 최솟값을 도출할 수 있다A는 오름차순, B는 내림차순으로 정렬해 0부터 배열 길이만큼 곱해서 누적!
조합(중복제거)을 구한다.각 원소에 대해 소수 판별 함수를 실행한다.
Math.ceil((100 - progresses\[i]) / speeds\[i]) 여기서
왼쪽괄호면 st에 쌓고,맨위에 st값이 오른쪽 괄호면 없앤다pop()과정을 끝내고 st길이가 남아있으면 false 없으면 true
코드 2
큐 자료구조를 이용한 문제0을 무게 초과 기준(queueSum)으로 기준을 초과하면 0을 unshift() 함 (합을 초기화)
코드
코드 풀이 내림차순 정렬 가장 무거운 무게 + 가장 가벼운 무게로 비교 맨 앞이 가장 무거운 무게이므로 두 무게의 합이 limit보다 크면 가장 무거운 무게를 지나간다(버린다) 동시에 boat갯수 추가 합이 limit 이하라면 무거운무게는 가벼운쪽으로, 가벼운무게는
동시에 일어나는 경우이기 때문에 answer에 값을 곱해준다아무것도 입지 않은 경우를 마지막에 빼준다.
정렬해서 수를 구하기 ❌\--> 숫자 위치들이 바뀌면 안된다.포인터를 이용해서 구하기 ❌지우고 남은 (number.length - k ) 수가 2개면 할만 하겠지만, 3, 4개되면 관리해야 할 포인터가 너무 많아져 복잡하게 된다.가능한 조합 구해서 가장 최댓값을 리턴하
1부터 시작 ~ n까지의 합이 15라면 cnt++이런 과정을 n / 2 의 숫자 까지만 반복해준다.그리고 맨 마지막은 n = n 이므로 + 1 을 해준다.
skill_tree에 있는 요소들을 split하고, skill에 존재하는 값들만 st 변수에 넣는다.그 후, skill 변수와 차례차례 비교하고 다르면 answer-- 하고, 다음 요소를 비교하기 위해 break
💪 도움됐던 재귀유튜브재귀함수가 두개있을때, 어느 순서대로 처리되는지 궁금해서 찾아본 결과,fib(n-1)함수가 1이하일때까지 호출됨(memory에 쌓임)fib(5), fib(4), ... fib(1)fib(1)에서 함수가 종료되고 1을 뱉으면 memory에서 제거되
입력 자료형이 Object자료형이 아니라 string형태로 되어 있어서, {를 지워주고 ,를 기준으로 split해 배열로 만들었다.그리고 중복이 존재하지 않으므로 요소 길이가 작은 것들부터 넣는다. 다음 넣을 요소가 이미 넣어진 요소와 중복한다면 그 요소는 SKIP한다
stack자료구조를 이용queue자료구조를 이용
무방향 그래프이다보니 무한cycle 오류에 빠질 수 있다. ➡️ Set() 자료형으로 방문여부를 체크해서 cycle을 방지할 수 있다. Set(), Map() Map key, value형식 추가하려면 set('','') symbol ⭕️, 객체 ⭕️,
각각 인덱스마다의 실패율을 구하고 가장 큰 값부터 차례대로 res배열에 담는다.✓ 한번 70점이 나왔는데 이유는 중간에 0 / 0 연산예외처리를 하지 않아서였다.
✓ 재귀함수로 다음 인덱스의 값이 같으면 splice하는 방법을 사용했다. ==> 시간초과 💀✓ 그냥 함수로 다시 시도 ==> 시간초과 💀문자의 길이가 1,000,000이하이므로 하나하나 비교해가며 제거하는 작업을 반복하는 것임..처음부터 다시 조사할 필요 없이
일반 숫자 자료형으로 했더니 오류가 발생함숫자범위 초과해서 그런듯하다BigInt자료형이 있어서 사용해 봤는데, 오류없이 잘 변환되었다.
왼쪽 괄호들은 모두 넣고,오른쪽 괄호일 경우 짝에 맞는 조건을 걸어 검사를 진행함
trim() : 양 끝의 공백을 제거한다.
indexOf(value)findIndex(콜백함수)
Brute Force : O(n^2) 알고리즘 : 그냥 구하는 방법 누적합을 이용하는 방법 Divide & Conquer : O(nlogn) 알고리즘 : Divide를 한 후 Conquer를 할 때 경계선 중심으로 확장하는 기법Scanning : O(n) 알고리즘
실제로 경우의 수를 구해보니 계단 1개는 12개는 23개는 34개는 55개는 8이렇게 구해졌다. 피보나치 수와 똑같은 원리
코드
Slow포인터는 하나씩 이동하지만 Fast포인터는 한번에 두개의 요소를 이동한다. 사이클이 발생된다면 언젠간 반드시 만나게 되어있다는 원리를 이용함
headA를 기준으로 잡고 같은게 있으면 그 노드에 포인터를 가리키게 한다.
재귀함수에서 call Stack 작업상황이 너무 헷걸려 트리로 도식화 해 보았다.merge_sort자체를 리턴한다는 것에 유의하자
두개의 포인터 left , right를 가지고 nums1, nums2 의 포인터 값을 비교한다.fVal값이 더 크면 nums1 자리에 그 값을 넣고,sVal값이 더 크면 nums1 자리에 nums2값을 그 자리에 넣는다.
일단 정렬시키고, 새로운 newNums 배열에 하나씩 넣고 가장 최근의 값과 넣을 값이 같으면 newNums.pop() 빼고,다르면 push한다
우선 오름차순으로 정렬한다.포인터가 하나씩 이동하며 현재 숫자와 cnt 를 통해 나온 숫자들을 비교한다.prev와 now 값이 같으면 cnt++ ,다르면 cnt = 1 로 초기화한다.😮💨 하지만 얼마나 자주 나왔는지에 대한 cnt값을 구할 수 있었지만 이에 해당
부동 소숫점 문제 예외 경우 10 3 20테스트 해보니 20번째자리수까지 나오지 않음직접 나누기 연산을 구현해야 할 것같다
처음 접근 방법주어진 숫자 - 소수 = 소수 ---> count ++위의 소수는 에라토스테네스의 채로 만들어진 소수 배열에서 가져온다.위에서는 덧셈으로 판별했는데, 위의 로직대로 뺄샘으로 해도 될 것 같다.뺄셈 연산을 계속 해줘야하는 단점이 있다.위의 코드대로라면 tr