: LLONG_MAX / LLONG_MIN: INT_MAX / INT_MIN
: 메인부에서 진입할 때, 항상 원소에 해당하는 부분에서 탐색하도록 하자...
ㅇㅇ
: 중간답 구하고, 최종 답을 구해야 하는데, 반복문으로 처리할 경우. 관련 문제 : 파닭파닭https://www.acmicpc.net/problem/14627
4-E 14890 경사로
cin 을 사용해서 입력할 경우메인부 바로 밑에 밑의 2줄을 작성하자. ios_base::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);endl 보다는 'n' 을 사용하자.
compare 함수내의 파라미터 값을 2개로 해서 비교를 하는데,bool compare(a, b) 일 때 증가하는 방식이라면 어떻게 생각하냐면 첫번째 매개변수인 a가 두번째 매개변수인 b보다 작다라는 생각을 가지고 접근하면 된다. 반대로 감소하는 방식이라면 먼저 온 a
: 중간값을 출력하면 된다.1) 입력값을 벡터에 넣고,2) 중간값을 출력하면 되지 않을까? : vector의 size는 기존 최종 컨테이너 인덱스보다 1 크므로,1을 감산해야한다.
: 다이나믹 프로그래밍을 이용함 1) 행렬을 어떻게 구성할까? 생각을 했다.가운데부터 그려나갈까?\-> 그러기엔 행렬을 나타내는 표가 너무 작다. 2) (0,0)부터 시작하다. (0,0)(1,0)(1,1)(2,0)(2,1)(2,2)(3,0)(3,1)(3,2)(3,3)(
: 그림 그리고 코딩하자!
LIS 역으로 추적하자.
고정적으로 3번의 연산이 이루어지므로 for문으로 진행했다. 연속적인 수가 아니므로, 떨어진 상태로 있는 컨테이너 확인해야 한다.
for문 7번 돌렸다. 9명 중에서 7명을 고르는 것은 7명 중에서 2명을 고르는 것과 동일하다. 9명을 모두 더한 뒤에 2명을 빼는 방법으로 구현하면 n제곱으로 구할수 있다. 하지만 여기서 뺀 인덱스를 알아야 하므로, 뺀값을 탐색하는 반복문을 추가해 n세제곱으로 구현
소스코드
오타, 항상 y값은 first이고, x값은 second로 설정하자.
dfs 풀이
=> 효율성이 떨어진다. 불변수 두개를 사용해서 오름인지, 내림인지 ,mixed인지 구별이 가능하다. 어차피 들어오는 값 8개 중에서 2개를 비교하는 것이므로 내가 한 요 부분을 통일시키자. 내림차순과 오름차순 변수를 모두 true로 하고, 오름차순 조건에서 반대로 동
endl 절대 사용하지 말자. -> 시간 초과 나온다. 일단 입력 수만큼의 반복문을 돌려야 한다. 그리고 그 안에서 삽입과 삭제가 이루어 져야 한다.
인접한 것들끼리의 숫자를 세야 한다. 인접한 것 벗어나면 0으로 초기화 dfs로 접근해야 쉽게 풀린다. dfs에서의 예외처리를 주의하자.
정답은 맞지만, 메모리 초과되는 코드
첫번째 소스코드
단어 : baekjoon 에서 각 알파벳이 사용된 횟수를 구하는 것임. int a, int b, int c,,,,\~~ int z까지가 있고, 초기화는 모두 0임. \-> 배열로 나타내면 a는 0번째 인덱스로 나타낼 수 있음. 저 단어에서 하나씩 뺀 다음에 카운딩을 하
: 9명 중에서 일곱명을 구하는 것임.조합이다.\-> 왜냐하면 순서에 관계없이 원하는 조건의 수를 추출하는 것이므로문제 조건으로 오름차순으로 뽑으라고 했고, 여러 정답 나오면 아무거나 출력\-> 순열( next_permutation) 으로 돌리면서 그 안에서 조건에 해
도착한 시간과 떠난 시간1번 트럭 : 1초에 도착 ~ 6초에 떠남...2번 트런 : 3초에 도착 ~ 5초에 떠남...3번 트럭 : 2초에 도착 ~ 8초에 떠남...=> 카운팅을 해서 접근하면 좋을 듯함..대충 설계를 하면... arr101 으로 놓고.arr1 ~ arr
: 앞 , 뒤 를 확인 후 같으면 앞, 뒤 제거같지 않으면? -> 0으로 리턴이고,추가적인 조건으로는 level 과 같이 가운데 값이 하나일 경우,\-> 조건 추가해야 함.
: 입력으로 들어오는 string의 앞 문자만 보고 카운팅을 진행함. 알파벳 소문자 이므로 , 배열 26개 만들어 놓고, 카운팅함.
숫자 제외하고 , 알파벳 소문자, 대문자일 경우에 + 13Z, z 초과하면 앞으로 이동해서 카운팅 조건 처리를 잘 해야함. 대문자 소문자를 분류 해서 진행함.
\-> 못품// 2번째 string 처리를 못함. 맨 뒤에 문자열과 비교하려는 string strcutEnd 를 비교하면 됨. : 생각만 잘하면 풀 수 있었음. 알아야 할 것들string.find 함수string.substr 함수
: string 함수 알아야 함. 책 필기 내용 참고
대문자만 있으므로 arr\[] 카운팅 하는 방식으로 접근해야 함. 고심해보면,,, 카운팅 배열 중에서 두 개이상이 홀수가 나오면 불가함.list의 반복자는 += 증감 연산이 불가능하다라는 것을 알아야 함. \-> c++ stl 공부 필요
: 단독 코드
: 경우의 수 란을 참고.하면 됨.
다른 사람과 다른 점. 1\. 불변수 체크 없이 진행했기 때문에, 진입하는 벡터로 값을 변경하면서 확인함. 2\. 함수 진입 점에 크기 체크함. \-> 변경해서 다시 풀자.
너비를 구하는 거여서 dfs 4개 들어가는 방향 바뀔 때마다 카운팅 할 까? 생각했는데 ,, 아닌 것 같아서 다시 생각해봄. 입력으로 들어오는 좌표 번호로 접근하지 말고, 사각형 중앙을 하나의 좌표로 보고 접근해서 생각하면 쉽게 접근할 수 있음. 맨 밑의 0,0 부분의
예제 3번 으로 입력함.
: 3번 입력값 넣은 후 20초 뒤에 채점됨.64개의 칸중에서 3개를 선택하는 모든 경우의 수이므로, 컴비네이션으로 나타낼수 있음. 시간 복잡도 64C3 이므로64! / (64 - 3) ! 3! \-> 64 63 62 / 3 2 \-> 대충 70 70 70
: 치킨집 중에서 m의 갯수만큼을 temp로 넣어줌.temp vs 모든 집 을 비교하면서 가장 최단거리의 합을 구하는 문제임/\-> 치킨집 중에서 m개만큼을 추출하는 것이므로, 조합 문제임. 업로드중..
\-1을 해야함...실수한 부분 : 인덱스 뒤바뀜.\-- 그림 설명: 최종점까지 가는데 , 나의 코드로 하면 9가 나옴. 즉 -1을 반드시 해야함!
\-> 출력 초과 발생함. 그리고 예제 입력 1,2,3,4는 맞았는데, 5번이 틀림.
\-> 첫번째만 나오게 한다음에 출력함.결과는 틀리다고 함... ㅡㅡ
\-> 결과 입력 1,2번은 맞았지만, 3번 틀림.3번 답은 10인데, 나의 결과는 6이 나옴...
: 문제 이해를 못함. \-> 문제 대로 접근하려고 하면 답이 전혀 안 나오는데문제에 대한 상세 설명이 좀 이상한듯. 하지만 풀고자 노력해보면...일단은 64를 반절씩 쪼개면서 32 3232 16 1632 16 8 832 16 8 4 432 16 8 4 2 232 16
\-> 시간초과 뜸.
\-> from의 값으로 정렬 한다음에, 이중포문 식으로 돌리려고 했는데, 이렇게 하면 , 효율성이 좋지 못하다라는 것을 생각함.: 큰돌님이 효율성, 시간복잡도가 높다고 생각하면, 다른 방법으로 시도해보라고 하심...
코드
알고리즘 분류 그리디 우선순위 문제를 보고 생각해야 할 부분 241029 이러한 반례를 생각해내는 것이 관건이다!!!!! 정말 중요! 2일 동안 강의 순회가 가능하다고 하자. day pay 1 10 2 20 3 40 이라고 한다면? -> 2 20 /
: 시간 초과 발생함. \-> 다른 방법으로 풀어야 함.
: 쉽게 접근함. \-> 틀림.
첫번째 코드
투포인터로 풀었음. \- start 점과 end점을 기준으로 해서 원하는 값일 경우, 카운팅하면서, 완료된 end 점과 start 을 처리함. ( 단 , 이때는 중복된 값이 없다는 조건하에서만 가능함.)
어렵다...
cin vs scanf.. \-> 백준에서는 scanf를 사용하자. https://ansohxxn.github.io/cpp/iospeed/
n과 입력값이 10억이라서 이분탐색 해야 겠다 생각함. : 문제의 흐름대로 작성해 나가려고 하면... 상자에 빨간 보석이 4개 (RRRR), 파란 보석이 7개 (BBBBBBB) 있었고, 이 보석을 5명의 아이들에게 나누어 주는 경우를 생각해보자. RR, RR, BB,
문제를 보고 , n 과 m이 10만개 일 경우, 시간 복잡도가 크므로, logN인 이분탐색을 해야겠다는 생각을 하게 됨. 최대값을 어떻게 설정할까에 대한 생각을 해야함. 만약에 m이 1이라고 한다면, 하나의 블루레이에 모든 동영상을 담아야 하므로,이 때는 총 동영상의
주의할점. : 문제대로 풀어나가서 check 함수를 == 으로 반환하게 되면, 계속해서 Min값이 커지는 문제가 발생하게 되므로, 부등호를 사용해야 함. 생각해내지 못한 부분. 1) 도대체 돈은 얼마정도가 있어야 할 것인가? 돈의 범위를 이분탐색으로 접근할 것인데, 얼
: 아무 생각없이 풀었음. \-> 역시 시간복잡도 m n 이 나옴.: 2만 2만...\-> 오름차순으로 정렬한 다음에 어떻게 할것인가 를 생각해봄...문제를 생각해보면. 1 1 3 7 8 vs 1 3 6비교를 하게 되는데,,, 8 친구는 1, 3, 6 -> 보다
// 0을 만들수 있는 경우의 수는 공집합이므로 1임.
1) 문자열 띄어쓰기를 해야 함. : getline을 사용하자.2) 여러줄을 입력받아야 함. while (getline(cin, string)) 을 사용하자.문제를 읽어보고, 1번을 2번으로 변경하자고 생각을 하게 됨. 그래서 일단 배열 선언해서 나타내봄.하다보니까 어
단순하게 생각함.3 나누기, 2 나누기 , 1 빼기 에서 1로 만드는 것이므로, 3 나누기 > 2 나누기 > 1빼기 순으로 우선순위를 설정해서 진행을 함. but 반례가 있음. n 이 10일 경우에는 경우의 수가 가) 10 -> 9 -> 3 -> 1나) 10 -> 5
코드
점화식
dn = vn vs dp1 + vn - 1 + dp2 + vn - 2....점화식 만들어 나가는 과정입력 예제 1번으로 진행함.
: 상태값이 2개가 있고, 그것을 배열에서 메모하면서 처리하는 것이 다이나믹 프로그래밍임. 상태값 : 길이 n / 인접한 자리의 차이 : 1상태를 통해서 배열의 형태를 만들어보면dn인데 점화식은 : 길이가 n이면서 인접합 자리의 차이가 1인 모든 경우의 계단수를 구하는
: 문제를 읽어보고 , 맞는지 안맞는지는 모르겠는데, 점화식을 만들어봄. \-> but 이것은 문제에서의 원하는 답이 아님...
: \-> 시간 초과 발생함. \--> 다른 방법을 찾아보자.
코드 결과
\-> 그런데 여기서 진행하려고 하면, 모두 0으로 설정됨. 뭔가 더 해야할 듯함. 점화식을 생각해보면 일단. 이차원배열임. di 라고 명시했을 때 di, di , di : i번열에서 빨강을 선택했을 때는 앞단에서는 파랑과 초록을 선택해야 함. 이런식으로 정의할 수 있
점화식 조건식1) 현재열에서 왼쪽에 사자를 놓았을 경우, \-> 0번인덱스로 지정하자.2) 현재열에서 오른쪽에 사자를 놓았을 경우,\-> 1번 인덱스로 지정하자.3) 추가적으로 사자를 한마리도 배치하지 않았을 경우가 있음. \-> 2번 인덱스로 지정하자. 점화식 di
문자열정렬중복 처리set으로 진행해야 할까? 생각을 했지만, 이럴경우, compare 함수 만드는데 복잡함, 어려움.어차피 정렬되어 있으니까. temp 변수에 넣고, 인접한 것과 비교하는 방식으로 진행함. 업로드중..
: 문제 이해를 못함...: 재귀
\-> 40% 끝남.
: 우선순위 큐를 오름차순으로 만든 후,7개출력만 하면 됨.
\-> 1번 예제만 맞음...
: 문제점. : 종료가 안됨.
\-> 58퍼센트 에서 틀림.
\-> 11퍼에서 틀림
못품... 엄청 복잡하게 생각함.코드
반환값을 어떻게 처리할 것인가??? : 등호냐? 부등호만으로 처리할 것이냐? c : 5일 때 440 350 230 에서 230으로 나누었을 때 1 1 1 -> 3개 밖에 안되므로. 이 때는 cnt와 c가 동일해야 만 하므로, end를 mid - 1 로 만들어 주는 방식
: 비트마스킹, 그리디
못품행렬 번호 2개과 파이프를 어떤 모양으로 나타낼수 있을까? 1개 임. 1) 행렬 번호는 쉽게 이차원 배열로 나타내고, 범위는 16개보다 큰 값으로2) 파이프 모양은 가로, 세로, 대각선 3으로 나타낼 수 있음. 즉 dp173각 원소에서 벽이 아닌 부분, 즉 0인 부
풀어야 함. 틀림1) 최대 3개의 scv 에다가 3개의 다른 데미지를 가할 수 있는 경우의 수는3! : 6개임 2) 동일한 가중치에서 묶음의 scv에 데미지를 가한 후, 카운팅을 반복해야함.\-> bfs를 해야 함.3) bfs이므로 체크 변수가 필요함. \-> 여기서
: 문제 이해를 못했음. \-> 중요한 부분은 5개의 도형을 배열로 나타낼수 있느냐에 대한 훈련을 해야함. 내 생각.\-> 세로로 긴 테트로미노로 1 5 2 6 을 채운다고 했을때 1개밖에 놓을수 없는거 아님? 이렇게 생각을 함..
: 숨바꼭질 문제와는 다르게,최단거리에서 끝마치는 것이 아니라, 동일한 최단 거리에 몇번 도달하는지를 카운팅을 해야 함. 1) 최단 거리에 첫번째로 들어올때 몇번의 카운팅으로 들어왔는지를 조사해야 함. -> 최단 경로라고 하자.2) 끝마치는 것이 아니라, 타겟에 도달하
: 다이나믹 프로그래밍 : 220828 일문제를 읽어보고, 주석을 달면서 만들어봄.// 수의 길이가 2인 경우. // 00 01 02 03 04 05 06 07 08 09 /10 : dp2 // 11 12 13 14 15 16 17 18 19 /9 : dp2 //
0 부터 시작해서 지그재그로 진행하면서 누적1 부터 시작해서 지그재그로 진행하면서 누적0 부터 시작해서 지그재그로 진행하다가 n - 2에서 max(vn -1 , vn -1) 가산하는 방법1 부터 시작해서 지그재그로 진행하다가 n - 2에서 max(vn -1 , vn -
\-> 틀림.
: 구현?1) 일단을 그림을 그려보면서 문제를 이해를 하려고 노력함. 2) start와 end 정점을 만든 후, 1초마다 방향을 선정해서 함께 오른쪽, 왼쪽 하는 즉 증감을 하면서 입력된 벡터에 도달하는지 카운팅을 하면서 진행함.
1) 문제를 보고, 조합으로 진행해야 겠다는 생각을 함.2) 모음 1개, 자음 2개 이상일 경우를 체크하고, 출력하는 방식으로 진행함. 업로드중..
1) 문제를 정말 잘 읽어보면서, 예시 입출력 값에 맞게주석으로 시뮬레이션을 돌려보자. 2) 가장 작은 막대기의 반절을 일단 제외를 한 다음에,나머지 막대기의 합이다. half = v.back() / 2 사용, 모든 벡터의 합 구한 후, half 뺌3) 조건을 거치면서
: 하나의 큐로 진행했는데, 아둥바둥 했는데도. 안됨...
입력 예제는 모두 맞았지만, 반례에서 잘못됨.https://www.acmicpc.net/board/view/42056그리고 고친다고 하더라고 시간초과된다고 함.코드
: bfs, 추적문제1) 어디서부터 유래됬는지를 기록하는 메모이제이션이 필요함.2) 벡터를 만들어서, 유래된 값은 넣고, 마지막에 추출하는 식으로 진행하자.
: 구현으로 품입력 예제는 맞음.
문자열구현 업로드중..
연속되는 0와 연속되는 1을 분류해서 카운팅을 함.이후에 최소값을 출력함.
: 6퍼센트에서 틀림.
220903뒤의 인덱스부터 앞으로 이동하면서 'c'발견하면, 다음 인덱스, 즉 한칸 앞의인덱스를 타겟으로 해서 진행하는 방식으로 구현함.
1) 시분초, 또는 다른 범위이지만, 제한 사항에서 올라간다는 단위가 나오게 되면, -> 하나의 단위로 통일하자. : 문제를 풀면서 01:10 vs 21:03 를 감산하려고 하는데, 1분을 60초로 가지고 와서 해야 하는 번거러움이 있었음..엉망이다...
개선할점. 문제를 맨 처음 보고, 각 집합의 원소 개수가 20만이고, 원소의 value값이 10억 -1까지 될 수 있따고 함. 그래서 -> 이분탐색으로 진행함. : 6퍼센트에서 틀림. 결과 -> 내가 만든 프로세르로는 효율적이지 못함. 수시로 이분탐색을 진행하고 잇음.
1) 무식하게 풀어보도록 하자.2) 다른 방법이 있는지 찾아보자.
1) 문제를 보고, 스택으로 접근할까 생각을 함.2) 스택으로 하지 않고도, 정수 카운팅으로 처리할 수 있다고 판단함.
소괄호, 대괄호에 따라 변수를 나뉘어서 카운팅을 진행함.그런데 5번 입력 예제에 의해서 stack을 추가해서 진행함. \-> 왜냐하면 , 대칭이 안되는 경우가 있음.
기준을 1인 부분을 기준으로 해서 인접한 부분을 확인하는 방식으로 했는데이렇게 하게 되면, 가운데 , 노란색 부분에 대한 처리를 어떻게 할 것인가에 대한 예외가 발생함.\-> 고민하는 시간이 많이 걸렸지만, 스스로 해결하지는 못함. 기준을 바깥쪽 부분으로 해서 진행하자
다시 풀어야 함.무조건 벡터로 사용하기 보다는 , 모든 입력 예제에서 공통적으로 처리가 가능하다면, 배열 사용하는 것이 효율적임.\--> 함수 인자로 들어가는 갯수를 줄일 수 잇음. : 10! 의 시간 복잡도는 360만 임.\-> 완전 탐색으로 풀어도 ㄱㅊ!1) 부등호
1번에 인접한 2,3번의 가중치가 동일함. 인접한 2,3번 을 기준으로 해서 또 진행하는 과정임. \--> 결론 : 동일한 가중치에 인접한 노드를 사용하므로, bfs로 접근하자! 업로드중..
다시 풀어봐야 함. : 투포인터반드시 , end 인덱스를 앞에서 부터 시작 해야 함. 합 계산하려는 인덱스의 수가 많아질수록, 논리적으로 합이 커짐. 각 조건마다, start와 end 인덱스 값이 증가하는데, 내가 만든 컨테이너의사이즈를 벗어날 수 있음. 이에 대한 조
와우... ;;
: 최종코드와는 다르게 string s를 입력으로 사용했는데, 시간초과 발생함.나머지 비트연산자 결과는 이상없었음. 1) endl -> '\\n'2) string -> char , 3) cin -> scanf("%s", &word);
: 조합으로 하려고 했는데 복잡함...
1) 일단 안움직이고, 움직이는 경우 총 2개가 있음.2) 자두는 최대 30번 움직일 수 있다고함. \-> 완전탐색으로 해결하려고 할 경우, 시간 복잡도는 2의 30승임. 2의 10승이 1024이므로 1000000000 임.어마 무시함.결론 : 다른 방법을 고찰해보자
: 입력예제는 모두 맞았는데, 틀림...
: 연산자가 있는 부분을 완전 탐색해서 계산처리해 가장 큰값이 나오게 하는 것임. 연산자 우선순위는 동일함.숫자를 나열 하면 : 3 8 7 9 2연산자를 나열하면 : + 곱하기 - 곱하기\-> 연산자를 계싼을 막 변경해보면서, 최고로 높은 값을 추출하라정답 코드
1) 트리 레벨(높이)에 대한 정보를 가지고 있어야 함. 2) 입력 값을 어떻게 레벨에 맞춰서 넣을까에 대한 생각을 해야 함.
1) 가로 인지, 세로인지 구별할 수 있게, 0과 1을 이용하자. 2) 각 행마다의 원소들 자리가 true인지 확인할 수 있는 조건을 만들어야 함. 이런식으로 나열만 할 수 있따면, 비트마스킹으로 각 원소에 대한 처리가 가능각 원소의 자릿수를 어떻게 만들 것이냐가 관건
단어의 갯수가 주어지고 해당 단어에서 판단하는 것임,단어의 문자로 판단해서 갯수 카운팅하는 것이 아님.
1) 비교 대상이 되는 "pi" , "ka" , "chu" 문자가 단 3개 밖에 없으므로 순차 탐색을 사용하자. 2) 내 생각에는 substr으로 앞에서부터 카운트 2 , 3을 해서 뽑은 다음에 3개 대상와 비교를 하는 방식으로 진행했음. \-> 완료함. 220914
: 시간 초과 뜸...
연산자의 갯수가 주어지고, 숫자들 사이 사이마다 연산자를 집어넣는 모든 경우의 수를 구한다고 함. 그림 : 연산자를 비트마스킹도 아니고, 모든 연산자를 한번씩 끼워 넣어야 한다는 이야기임. \-> 순열을 돌리면 되지 않을까? 라는 생각을 했고,테스트를 하기 위해서 :
경우의 수가 2개가 있음. \-> 완전한 알약과 반절로 된 알약, 따라서 2차워배열로 만들 수 있음. : 알약의 개수는 최대 30개이므로 dp31 로 만들 수 있음. 기저사례: 최종 리턴 하기메모이제이션 : 이미 값이 존재한다면, 그값을 리턴하자.
0을 만날때마다 string 쌓은 것을 reverse 한후에 long long으로 변경해서 소수 판별을 진행함. \-> 64.3점 맞음. 문자열 길어질수 있으므로 longlong문자열을 따로 따로 reverse, 소수판별을 하게 되므로 성능이 떨어질 수 잇음. 코딩하면
입력 예제의 경우는 백조1과 백조 2사이의 간격이 좁지만, 테스트 케이스의 입력 예시 // 단, 1 ≤ R, C ≤ 1500.백조의 위치를 물위 상태로, X 에 가장 인접한 곳으로 위치시키면 좀 더 빠르게 다른 백조와 만날 수 있음.
문제가 된다면, 전역변수로 사용하자. 배열을 인자로 전달하는 것은 포인터로 전달해야 함.
ㅇㅇㅇ
: out of bound가 떳음... 문제에서 주어지는 입력값의 범위는 1 ~ 400만임. 1이 그냥 들어올수도 있다는 의미임. \-> 문제를 풀면서 생각해내지 못했지만, 문제를 다 풀고 난 후에.. 입력 조건을 보고, 내가 코딩한 프로세스를 보면서 뭐가 부족한지를
그림 위에거가 투포인터 풀이 아래거가 완탐 풀이 \-> 결과 : 시간차이가 있음. : 투포인터로 풀어야 함.시간 복잡도가 2개를 탐색하는 것이므로 2만 \* 2만 -> 억 넘어감.\-> 결과 : 완탐으로 풀면안됨.문제를 읽어보면 , "고유한" 이라고 작성되어 있음. \
조합으로 처리할 때, 조합 개수 판단하기 위해서 벡터를 사용했는데. 벡터 사용을 하지 말고, 매개변수의 값으로 조건 처리하도록 변경해보자. 너무 어렵게 생각한 합 계산하기 : 13 16 36 v1 + v3 // v1 + v6 // v3 + v6이다. 어떻게 처리할까..
풀이전략 1. 뚫린 부분을 어떻게 처리할 수 있을까? 0,0 인 부분은 11 즉 1101 0,1 인 부분은 6 즉 0110 이다. 기준인 0,0에서 보면, 4방면을 확인하고, 0인 부분에 방문을 해야 함. 이를 비트마스킹으로 접근 할 수 있음. 2. 가장 넓은 방
\-> bfs가 아님, 백트래킹임.
: 누적합이어서, 열마다 처리하는 방식으로 했는데, 시간초과 발생함. 아예 행과 열 누적합 처리하는 방식으로 진행 해야 함. 열마다 처리할 경우
https://www.acmicpc.net/submit/1780/49507466
: 길이가 n개인 수열 중, 연속한 1개 이상의 수를 뽑았을 때, 동일한 수가 여러번 등장하지 않는 경우의 수는?1번) 1 에서부터 마지막 2번까지 길이를 하나씩 늘려나가면서 동일한 것이 있는지를 체킹 하면서 카운팅을 함.: start : 0 / end : 4까지 도달
각 인덱스마다 카운팅을 한후, 나타날때마다 차감을 해서 가장 작은 값이 있는 원소를 빼고, 그 자리에 새로운 값을 넣어주는 방식으로함 : 27퍼에서 틀림. 4 201 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5\-> should print 4,
위로 움직이는 거만 만듦.
: m개 중에서 n개를 선택하는 모든 경우의 수이므로, 조합으로 접근했지만, 시간초과 발생함.왜 발생했을까? : 0 < n < M < 30 이라고 함. 조합이므로 30C30 이라는 것인데, 대충 계산해보아도 30! 팩토리얼 정도이므로 일일이 계산하기에는
단어 하나씩 확인을 하면서 가장 작은 소문자 발견할 경우, substr그 값을 reverse 하는 방식으로 진행함.\-> 14퍼센트에서 틀림. 반례가 있음. : zzzzaaaa 코드
비슷하게 했는데 뭔가가 잘못됨...
문제를 보면, 방향성이 없다고 함.예제 입력 1, 2 번을 보면, 인접한 정점에 대하여 깊이 있게 들어가고, 외부 탐색 시 , 즉 for( 모든 정점 에 대하여 탐색) 할 때 카운팅을 하고, dfs 에서는 방문 체크를 하면 될 것 같다는 전략을 세움.
소스코드주의할 점 : 입출력 tie 해야 함.놓친 부분: vector 배열 정렬할 때 마지막 for문 등호 빼먹음..
네이버 블로그 참고.
1번) \-> 문제를 분석하면 n n 의 표를 만들어서 각 지점 x1, y1 ~ x2 , y2 까지의 영역의 합을 구하는 것인데, 최악의 경우를 생각하면 x1 = 1 , y1 = 2 / x2 = n , y2 = n 일 경우임이러한 경우에 2차원 이기 때문에 n n
: n은 1000만 이고, 부분 연속합이고,15의 경우, 아래의 4가지 경우가 있음. 즉, 15까지 진행을 한다는 것이기 때문에 15 하나 연속값 추출1000만 \* 1000만 이고, 시간 제한은 2초여서 ,2억 초과함. \-> 연속적인 원소들 가운데서 부분합을 구하는
작성하다가 중단함. \-> 인덱스 비교하는 부분이 내 생각에는 goo 재귀 하기전에 해야 할듯 하다 생각함.그래서 일단 작성중에 중지..
: 이방식으로 풀자. https://yabmoons.tistory.com/450합칠수 있는 부분과 합칠수 없는 부분을 분류해서 진행하자. 합칠수 없는 부분이 되는 경우는 결국에 최종 인자로 넘어오는 크기가 1이 되는 경우합칠수 있다면, 가장 작은 단위로 넘어가
가변인자가 아니라vector<typename T , allocator> 이다. 반드시 하나의 타입만 넣어줘야 한다.
: ㅇㅇㅇ
: 본문을 읽어보면, Union에 진입했을 때, 입력 값 a,b가 동일한 루트 노드를 가지고 있다면 바로 뛰쳐나오게 하는 내용이다. union find를 사용하고, 기존의 코드에서 Union 함수에 코드 추가함. 업로드중..
: 시간초과 발생한다.이유는 dfs가 아닌 완탐으로 풀었다. 1만으로 모든 정점을 탐색하니까.결국 1억의 시간복잡도를 가지고 온다. https://www.acmicpc.net/submit/1325/85859377네이버 블로그 완탐 부분 다시 공부하자.
: dfs로 접근하면 되지 않을까? 생각함.그리고 visied의 상태값을 통해 출력하면 된다고 생각했으나.예제 4번을 처리하기 위해서 각 정점을 서로 엮어놓았기 때문에 절대로 dfs로는 해당 문제를 풀수 없었다. 이렇게 구성함. dfs로 풀수 없다고 생각했냐면 입력 예
: 주어진 n 에 대해서 100을 감산한 크기를 얻고 숫자 버튼을 누르거나, '+' , '- ' 버튼을 눌러서 n을 만드는 방법 중에서 버튼을 누르는 최소값을 구하라! 는 문제 이다. \-> 문제에서 숫자 버튼이 삭제 될수 있다고 하고, n의 범위는 0 ~ 50만이다.
그냥 string으로 처리함.\-> 메모리 초과 발생: 재귀 사용\-> 시간 초과 발생함.
: 너무 어렵게 생각했다.접근 방법은 맞았다! 좀 더 쉽게 접근할 수 있는 방법이 없을까???? 생각해보자..
1) 겉에 거를 먼저 처리하고, 안으로 들어가는 방식을 생각함.2) 상단부에서 배열이 이동하는 것과 우측에서 배열이 이동하는 시퀀스,좌측에서 배열이 움직이는 시퀀스, 아래에서 배열이 이동하는 시퀀스가 다르다.\-> 분류해서 처리해야 겠다는 생각을 함.3) 내부로 들어가
이렇게 하지 말고, 어차피 10의 단위로 올리려고 하므로, 여기서 바로 10의 자리 처리하자. : 이렇게 하면 아래의 코드에서 우선순위 정렬 처리하는 작업을 해야 한다. 업로드중..
기본적으로 드는 생각 : 예제 입력 2번은 통과되어야 하고, 예제 입력 3번은 통과되지 않아야 한다. 잘못된 생각: 예제 입력 2번에서 0번을 기준으로 해서 30 까지 진행하는데, 1번으로 복귀 해서 4로 진입한다. 이렇게 하면 카운트 5가 되지 않는데,,,,어떻게 해
: 잘못된 생각으로 접근함. 4자리수라고 할 때 1000 ~ 9999 까지이다. 그래서 만약에 2333 이라고 한다면, 10으로 나누면서 몫을 가지고 소수인지를 일일이 판별하는 방식으로 접근함. \-> 잘못됨4를 넣으면 이렇게 나오는데, 4337 4339 / 4391
3번과 4번은 가로와 세로 가 뒤집어져야 한다.
테스트 케이스 5개는 다 맞음..: 뭐가 문제일까???
매 순간 인접한 영역인지를 확인해야 한다. : 반례를 생각해야 했다. 0 0 500 0 500 0 0을 하게 되는 경우 아래의 코드는 최대값 100이 나온다. 왜냐하면 50 50 위 아래 확인시 다른 인접한 영역을 먼저 확인을 해야 하는데 아래의 코드 일부분은 인접한
재귀로 풀었는데 4퍼센트 발생했다. 반례: 최악의 경우를 생각해보자.숫자버튼 023456789 가 고장나버린 상태다. 1만 사용가능한 상태다.그 가운데 이동하고 싶은 채널 번호가 888 이다. 초기값 100번에서 888로 이동하는데는 788번이다. 1만 사용가능하므로
문제를 보고 느낀점 2차원 배열에서 테트로미노를 적절히 한개만 뽑아다가 가져다 놓으면서 최대값이므로 브루트포스로 접근해야 겠따 생각함.회전이나 대칭이 가능하다고 하다. \-> 총 19개가 나오고 기준점을 어떻게 잡을 것인가? 가 관점이었다.파란색 가로 막대기는 총 2번
4퍼센트에서 시간초과 발생. 완전탐색으로 풀었는데, 틀린다. 왜냐하면 n,m이 각각 4만이기 때문에 4 4 100000000 -> 16억의 시간복잡도이기 때문이다. 문제를 보고 느낀점은 나머지 연산을 생각할 수 있다는 것이다. 왜냐하면 특정 범위 n,m과 동일하다면
문제를 읽어보면, 모든 도시를 방문해야 하고, 한번 갔던 도시 갈수 없는 -> 중복이 없다.\-> 즉 순열을 생각해내야 한다. 1,2,3 의 경우 123 / 132 / 231 / 213 / 312 / 321 이 나오는 모든 경우의 수를 획득할 수 있고, 중복이 없기 때
역추적해야 한다. 반드시 이렇게 해야 한다.이렇게 하면 중간에 동일한 값을 가지고 있는 것들에서 걸린다.
: int로 진행하면 최대범위가 90이기 때문에 에러 발생한다. long long으로 해야 한다. 그런데 왜 long long으로 해야 할까???memon = memon-1 + memon-1memon = memon-1;마지막에 memon + memon 인데 이렇게
: out of bound 문제 발생한다. 위 그림을 토대로 0번 인덱스부터 시작한다고 한다면 가장 아래에 있는 것은 4 ~ 4 이고, 나는 연산하는 범위를 이렇게 했고, 선언부는 이렇다.뭐가 문제인지는 내가 판단해야 한다.
: 기준이 되는 배열의 인덱스 정할 때 arr = arr2 할 때 반드시 arr 앞에 있는 배열을 기준으로 해서 진행하자. 해당 문제의 3번의 경우 기준을 뒤로 잡았따.실행결과 앞을 기준으로 해서 진행해야 한다.
250116 16:24 ~ 17:25뭔가를 잘못함.
: string 입력값을 인덱싱으로 구분할 경우의 문제점. 입력되는 값이 8개이고, push_front, push_back 에 경우공백을 사이에 두고, 정수가 들어온다. 그래서 코드를 이렇게 만들었는데,문제는 push 계열 2개의 입력값이 들어오면 첫번째 if문의 인덱
250119 16:33 ~ 16:29 맨 처음에는 단방향으로 해도 되지 않을까? 란 생각을 함. 왜냐하면 예제 입력 1번으로만 생각하게 되서다.이러한 경우를 생각해보자. 3번째 입력값을 2 1 로 하게 된다면? 1번에서 2번으로는 갈수 없을까? 아니다. 문제를 읽어보
: 중복에 제한이 있는 순열 문제로 피로 물든 딸기님 강의를 보고 풀이법 얻음 possible배열을 통해 처리 가능함.
\-> 참고 하면서 풀었음...
잘못된 생각. 벽을 부쉈다는 유무를 큐에다가 넣고 탐색하는 방식을 생각했는데 잘못된 생각이다. 지금 이렇게 하게 되면, 만약에 0번 인덱스에서 걸렸다고 한다면 나머지 1,2,3번의 cur는 벽을 부쉈다는 건데 탐색이 불가하다. 그렇다면 이렇게 할 경우에도 문제다.누적되