: 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번으로는 갈수 없을까? 아니다. 문제를 읽어보
잘못된 생각. 벽을 부쉈다는 유무를 큐에다가 넣고 탐색하는 방식을 생각했는데 잘못된 생각이다. 지금 이렇게 하게 되면, 만약에 0번 인덱스에서 걸렸다고 한다면 나머지 1,2,3번의 cur는 벽을 부쉈다는 건데 탐색이 불가하다. 그렇다면 이렇게 할 경우에도 문제다.누적되
https://www.acmicpc.net/board/view/149855: 중복되는 값들을 set 으로 처리하려고 했다. 그래서 set ss; 으로 해서 진행했는데, 46퍼센트에서 틀림... 반례가 있다. 이 코드에서
시간초과 발생하는 코드 https://www.acmicpc.net/submit/2580/95113897적합한 코드 https://cryptosalamander.tistory.com/59
https://terrys-tech-log.tistory.com/8
: 아래처럼 진행하면 시간초과된다.왜냐하면 for문 한개가 불필요하게 추가되기 때문이다.
: long long 인자를 받아서 카운팅을 한다고 한다면 이때도 그냥 long long으로 하자.예제 3번을 했을때 몫이 8이 나와야 22가 나온다. 는 것을 예측하고 만든 코드cnt를 long long 으로 할 때 cnt를 ing로 할 때... 값이 잘려서 그런지
ㅇㅇㅇ
: 가장 중요하다. 문제를 보면, low와 high 값을 어떻게 설정할지가 관건이다. : m의 최대값은 20억인데, // 지금의 경우에는 m에 굳이 주의를 기울일 필요가 전혀 없는데, 나는 m도 관심을 가지고 있음. // 만약 모든 n개의 나무의 길이가 다 '10억'
알고스팟 p.446 darpa 문제와 동일하다.
벽을 모두 세운 후에, 바이러스 확산이 진행된다.벽 3개를 어떻게 세우고, 그로 인해 확산되지 않은곳 0인 부분은 카운트 하는 것이다. 최대 크기가 8 \* 8이므로 완탐을 해도 시간 복잡도에 무리는 없다. 0인 부분에 1인 벽을 설치하자. 총 3번 설치해서 확산을 늦
: 250623: 2번의 경우에는 최단거리에 도달하는 모든 경로를 카운팅 해야 하므로visited 변수를 사용하지 않음. 대신에 dist 배열을 통해 최단거리를 조건 처리함. : 4번의 경우 역추적이다. 배열 reverseV 만들어서 curV를 넣는 방법으로 접근함.
: 종점까지 가는 방법은 많다.1) 오른쪽 쭉가다 아래로 가는 경우에는 벽을 한번 뿌순다.2) 아래로 쭉가다 오른쪽 한번 가는 경우에는 벽을 안뿌순다.\-> 즉 visited는 필요 없고, 다른 어떤 조건을 통해서 무한적으로 q에 push 하는 것을 막아야 한다. 그래
visited에 대해서 생각해보자. : 일분에 3가지 경우의 수를 확인해야 한다. 그리고 최소값이므로,bfs이고, 3가지를 한번에 큐에 넣어가면서 진행함. visited 를 어떻게 처리할지에 대해서 고민했다..monitor 하나에 대해서 하게 되는 경우 틀린다. bfs
불 부터 이동하고, 지훈이 이동한다. visted 조건 처리할때 : dist값을 집어 넣었는데, 이런식으로 진행하면 메모리 초과 발생한다. \-> 의도가 뭐냐면, 이미 방문되어 있는데, 다른곳에서 접근하는 값을 비교하려고 했다. 오답 조건처리 -> 메모리 초과 발생함.
: 문제를 읽어보고 괄호를 먼저 만든뒤 접근하려고 했는데, 이렇게 해도 계산하는데 문제다.// 55-50+40-50+50// 이거를 괄호로 해봤자 문제다. // 55-(50+40)-(50)// 괄호 처리해야 한다.// 어쨋든 완성한 string에서 괄호를 처리하면서 수
: 그리디..?? : resultSum 할 때 int 타입으로 해서 4퍼센트 에서 틀림1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 마지막 10000이라고 하고 n이 100만이라고 하면 resultSum을 long long 으로변경해야 겠다는 생각을 함.
문제를 읽고 생각해보면, 시간복잡도는 2의 2500승이 나온다.아래의 주석 설명과 문제를 읽어보면, 된다. \-> 완탐으로는 못한다는 생각을 했고..... 음. 그 다음에는 도저히 어떻게 할지 판단을 못했다.\--> 즉 이번 문제는 틀림. 어떻게 할 건데...
: 문제를 이해하는데 어렵다. ㅇㅇ
단순하게 string -> long long 으로 변환해서 진행했는데,입력으로는 10만 자리의 숫자가 들어올 수 있다.\-> 이로인해 out of range 발생함. 핵심: 타겟을 잡고 어떻게 줄여나갈 수 있을까?또는 규칙성, 공통점이 있을까????를 생각해보자. 30
95퍼센트 틀림: 문제를 읽어보면, 2개를 묶어서 처리하는데 그럼 1개만 있을 때에 대해서 생각해야 한다.과연 10 1개만 있으면 10이 출력되어야 할까?\-> 아니다. 문제를 읽고 그럼 1개가 있다면 비교를 할 수 있을까???를 생각해야 하고, 그렇다면 1개이면 비
문제 해결 전략 : 이런식으로 했는데, 문제가 있다.첫번째 거를 누르냐? 누르지 않는냐를 둘 다 진행해야 한다.: 왜냐하면 첫번째 거를 누르지 않더라도, 2번째 거를 눌러서도 1번째 거를 변경할 수 있다.// 011// 110 이라고 할 때 2번째 스위치를 눌러서도 1
문제를 읽어보면, 매순간 2개의 경우를 선택할 수 있기 때문에 완탐으로 진행하면 s : 1 자리, t가 1000 자리 라고 한다면시간 복잡도는 2의 (1000-1) 승이기 때문에 \-> 완탐으로는 풀 수 없다. 그렇다고 규칙성도 없기 때문에 dp도 아니다... '
어렵다!
https://eunsolsblog.tistory.com/entry/C-%EB%B0%B1%EC%A4%80-2504%EB%B2%88-%EA%B4%84%ED%98%B8%EC%9D%98-%EA%B0%92
문제를 잘 읽어보자. 타겟으로 잡은 부분문자열에 있는 b 문자와 해당되지 않은 문자열에 있는 문자 중 a를 교환하는 것이 아니다. \-> 그러한 내용 작성되지 않음.: 그냥 b 문자를 곧바로 a로 교환하는 것이다.따라서 쉽게 접근할 수 있다.: 전체 문자열 중에서 a의
반드시 이러한 형태로 접근해야 한다. 투포인터의 경우, 마지막 인덱스에 대해서도 생각해야 한다. 나는 sum += veend; 이후에 eend++; 식으로 진행하기 때문에 while(eend < n) 조건식에 마지막 sum 에 대한 확인이 불가하다. veend 를
문제를 읽으면 , 600C4를 해야하는 것인가? 생각이 든다.그러면 조합 공식에 따르면 이건데.600! / 596! \* 4!내 생각에는 그냥 600! 599! 597! \* 596! 이다. 즉 위의 시간복잡도와 동일하다. \-> 즉 완탐으로는 불가하다. 나열된 수
: 투포인터.: k 때문에 틀렸다...만약 k가 200만이라고 한다면... \-> 얼음의 합은 21이다. 문제를 읽고 좀 이상하다는 생각을 했다... 좌표는 100만까지인데,,, 좌우로 k까지 200만을 갈 수 있다... 음... 코드\-> 여기까지 생각함... 입력
알고리즘 해결 전략이 잘못되었다. \-> dfs를 하면서 정점 진입할 때마다 색 변경하는 식으로 했는데,이런식으로 할 때의 왜 틀렸냐면 ?문제를 잘못 판단해서 진행했다.: 인접한 정점들의 색을 달라야 한다는 점들의 색이 다르다!. 라는 것을 보고 접근해야 하는데, 나는
문제를 읽어보면, a에서 b로 , a에서 c로 , b에서 a로 , b에서 c로 , c에서 a로 , c에서 b로 향하는 총 6가지 방법이 있다. 그리고 한번 체크를 했다면 다시 방문할 필요가 없기 때문에 결론: bfs로 해야겠다는 판단을 함. 나의 경우는 dir을 풀어서
순환 그래프를 먼저 만드는 작업을 하자.내가 생각하지 못함. // 백준 601 강의자료 참고함. : 순환그래프에 속한 정점을 큐에 넣고, 뺑뺑이 돌려서 dist 갱신함. // 이 부분을 못함.
처음에는 그냥 dfds로 파고 들어가면서 구하려고 함.=> 4퍼센트 틀림. 최소값을 구할 때 내가 생각한 부분은 1-2-3 보다는 1-3 선택하는 것이 최선이라고 생각함. 문제에서 중요한 부분. // 그리고 놓친 부분. => bfs로 진행하자. => 문제 틀렸다면 빠르
https://www.acmicpc.net/board/view/46227각 파티에 대해서 진실아는 친구가 있다면 해당 파티에 있는 모든 사람들에 대해서 같은 그룹으로 만들려고 했따. 예를 들어 진실 아는 친구는 1,2,3,4 인데 9번을 순회하는 도중에 진실과
n과 m이 각각 1000이고, 어디다가 safe zone 을 만들지 그리고 몇개를 만들지 정하기는 논리적으로 생각해도 굉장히 시간복잡도가 높을 것으로 예상된다.=> 완탐 불가. 최소 cnt여서 bfs를 생각했는데 정해진 dir 으로만 이동이 가능하므로 => bfs 아니
: 작은 부품부터 해결해나가야 할까? 큰 부품부터 해결해야 할까? 에 대한 생각을 함.. 입력값 cin >> x >> y >> k; 이고, y.push_back({x, k}) ; 으로 하기에는 누적되는 costs 비용을 처리할 수 없는 구조여서 x.push_back({
: 다익스트라이러한 상황을 생각해야 한다. 1번 에서 2번으로 향하는 버스 가)번의 cost : 50001번 에서 2번으로 향하는 버스 나)번의 cost : 10000 이라고 한다면나) 번의 버스를 진행할 필요는 없다! : 1753 최단경로는 입력 예제로 위와 같은 입
: 1번 정점에서 n번 정점으로 바로 다익스트라 때리면 , 자칫하면 v1, v2는 정점은 방문하지 못할 수 있어서1 -> v1 -> v2 -> n 번으로 가는 path1 -> v2 -> v1 -> n 번으로 가는 path 2개 중에서 가장 낮은 dist를 선택하기로 함
: 다익스트라. 기존의 다익스트라와는 다르게 모든 도시 번호 중에서 여러개의 면접장 중에서 최단거리를 출력하는 문제이다. \-> 그래서 어떻게 했냐면?: 모든 정점을 시작정점으로 해서 다른 정점에 대해 다익스트라를 구함.그리고 dist면접장 번호 여러개 중 가장 작은
1) 간선에 대한 정보: 문제를 읽어보면, 정점 -> 정점 으로 향하는 간선에 대한 정보가불명확하다. 어떤 것이 편의점이고, 어떤 것이 집인지에대한 정보를 알 수 없기 때문에 => 양방향 그래프로 진행해야 한다. 2) 문제의 본질은 편의점을 시작점으로 해서 집으로 가는
: 여기서는 distsstart != 1e9 조건식 필요 없다.더 나아가서.
ㅇㅇ
https://www.acmicpc.net/board/view/27386
나의 위치에서부터 + 1 ~ +6 또는 사다리를 타거나, 뱀을 이용해서 이동을 하는데, 동일하게 +1씩 카운팅을 하고 있다.최단 경로를 구하는 것이므로 bfs로 접근을 결정함. 위에는 사다리나, 뱀을 만난 경우이고,아래는 일반적인 주사위 만큼 증가한것이다. 문제를 자세
: 백준 12886 돌그룹 set은 class로 사용하기에는 operator < 만들어야 한다.. tuple 을 사용한다.업로드중..
새로운 상태 : 낮과 밤이 생겼다.0,1 로 하고, 알아두어야하는 부분에 대해서... int daytime = get 을 했는데, 이 때 daytime 은 1일 수도 0일 수도 있다.그런데 반대로 표현하고자 할 때는 1인 경우에는 0으로 나오게 해야 하고,0 인 경우에
: bfs: visited 변수에 대해서 생각해야 한다. 1) t의 값이 10억이기 때문에 bool로 하기에는 적합치 않다고 생각해서 set을 사용함.\-> 여기까지는 혼자 생각해냄아래의 구조로 진행하면 nextNum이 엄청 커진다는 부분이 있다.매 조건마다 추가함.놓
: 상태값이 있는 bfs \-> 문제에서 가중치가 다른 방법을 통해서 도착점까지의 최단경로를 구하는 것이다. 맨 처음 문제 풀면서 파악하지 못했다.왜냐하면 벽부수고 이동하기 2번을 숙지하지 못했기 때문이다. 1번 예제는 이렇게 가야겠구나. 생각을 함.그런데 나의 상상의
플로이드 워셜 + 백트래킹. distTable을 구한후, 이렇게 생각해봐야 한다. 1,2,3번 이 있을 때 start가 1이라고 했을 때 문제에서 모든 행성을 탐험하는 데 있어서의 최단 시간을 구하는 것이므로, 플로이드 워셜에서 끝나는 것이 아니라. 경우의 수를 구해야
: 플로이드 워셜 + parent 정점을 구하라는 문제플로이드 워셜 한 후, 갱신되는 경로를 node 테이블에다가 넣는 식으로 하니까. 이렇게 출력된다. 1에서 6행으로 가는 테이블 번호가 일치하지 않는다. : 문제에서 가장 먼저 거쳐야 한다고 해서, 나는 그렇다면 어
: 백트래킹 + bfs비활성화 바이러스가 활성화가 되었을 때는 해당 \* 칸에는 누적시간이 계산되지 않음을 확인할 수 있다.여기서도 마찬가지로 처리하고 있다. 비활성화된 칸에서 활성화가 되고, 그 칸에서 다음칸에 대해서 바이러스 작업을 한건데, 그러면 비활성화가 활성화
: 플로이드 워셜 + 아이디어... 문제에서 단방향인 경우, 양방향으로 만들 수 있도록 카운팅해야 한다고 한다. \-> 즉 이미 일반 통행인 길의 경우에만 양방향으로 바꿀수 있는 기회가 주어지는 것이다.우리는 경유지를 통해 모든 정점간의 distT를 구하고 있는 것이므
순열에 대한 시간복잡도를 생각하지 못함.문제 해결전략이 잘못됨위 문제를 조합이다. 그리고 n! 이라고 하더라도 숫자가 11 이라고 하면 연산자는 10개가 들어올 수 있는데,4개의 연산자가 모두 10개 중복될 수 있다는 것이다.\-> 그 결과 모든 연산자 operV.si
2개의 동전의 posY, posX , posY, posX 를 하나로 해서 이동하기로 결정함. : 발견하면 모든 반복문 탈출해야 했는데, 못함... 위의 코드를 주석한 다음에 예제 입력 5번을 입력하면, 이렇게 나온다... 그래서 음... 뭐지 왜 안터지지??? 라는 생
원소를 제거해야 하는데,,, vector.erase 를 생각해내지 못함.
: 순열 map 사용1) map사용하면 시간초과 발생한다. : 단어 조합을 만들때 map을 통해 설정후, get 해서 사용했다. 2) char 로 변경하면 성공한다.// 1-2 a.브루트포스\_순열 pdf 참고함.char alpha256; 전역변수로 선언함.
: 기타 a,b,c, 3개를 선택했을 때 yyyyy 전체 full이고,, 기타 d 1개를 선택했을 때 yyyyy 전체가 full 인경우에는 이때는 기타 d인 1개를 선택해야 한다. 이 조건처리를 못했다. : 나머지 나의 비트마스킹 풀이는 올바르다.
: 문제가 이해가 되지않을 수 있따. 내가 인지하지 못한 부분이 있다. 현재 첫번째 자리수까지 포함하기 위해서 b와 c에 감산을 했다.20번째 좌석에서 21번 좌석으로 가는 순간 사라져야 한다. 즉 21번 자릿수로 향하게 하려면 1 << 20으로 해야 한다.
해결 전략 : 중간에서 만나기 과정. 선택하고, 선택하지 않는 비트마스킹을 생각했고, 이때의 시간복잡도는 2의 40승이다. 1000 * 1000 * 1000 * 1000... -> 비트마스킹으로 불가하다. 우리가 구하고자 하는 거는 선택한 인덱스의 값을 모두 더했을
음 비트마스킹인가? 생각을 했는데, 잘못됨.문제를 제 멋대로 판단함. : 연속된 인덱스 의 합이다. \-> 왜 비트마스킹이라 생각했냐면, 바로 이전에 푼,,,, 1644번, 부분수열 2 문제의 영향이다... 흠... 이러면 안되는데.. 문제를 읽고 판단하자.그러면 n과
: 입력 예제 대로 작성하면 틀린다. 왜냐하면 반례가 있다.
: 구현 https://eunsolsblog.tistory.com/entry/C-%EB%B0%B1%EC%A4%80-2504%EB%B2%88-%EA%B4%84%ED%98%B8%EC%9D%98-%EA%B0%92
여기 잘못되었다... 흠... 이렇게 해야 한다.: 의미하는 것이 뭔지를 생각하면서 작성하자...
ddddd
: 스택 n이 8만인데, 만약에 8만 인덱스가 모두 내림차순이라고 한다면 총 카운팅의 합산을 어떻게 될까? 예를 들면 아래의 4개 값으로 하면 총 6이 나온다.for(int i = 1; ~ i < 8만) psum += i; 이라는 것이다. 1 + 2 + 3 + .
: 아무 생각 없이 문제 대로 구현해서 틀림. \-> 시간 초과 발생함.내가 잘 하는 주석으로 입력 데이터들을 넣어보면서 \-> 최고의 효율로 작성할 수 있을지가 관건이다. https://oesnuj.tistory.com/entry/C-%EB%B0%B1%EC%
: 스택: 연산자 계산하는 방법이 잘못됨. 내 생각은 이렇다. 피연산자를 계속 쌓다가. 연산자가 피연산자 개수 -1 만큼 들어왔을 때 계산을 진행하는 방법으로 했다.코드는 이렇다. \-> 막상 이렇게 했는데 틀렸다. 코테에서 완벽하게 구현했다고 생각했는데, 이렇게 틀리
: list를 얼마나 잘 알고 있고, 얼마나 잘 사용하는지 문제ㅇㅇ
: 반례가 있다.
stl 오류발생할까?ㅇㅇ
R 이 매번 나올 때마다 뒤집기에는 n이 10만이다.즉 10만 \* 10만 이므로 나는 R 이 짝수면 그대로 홀수면 뒤집는 식으로 했는데,,,, 16퍼센트에서 틀린다. RDRDRDRDRDRD 이렇게 되면 ㅋㅋ 어떻게 될지... 그렇다는 것은 10만 중에서 5만번의 Re
ㅇㅇㅇ
: 역순으로 생각하기 완탐으로 돌리기에는 적절치 않다고 판단함. 문제에 주어진 것은 기술 3가지와 입력값 이다. 입력값으로 어떻게 카드뭉치 놓여졌는지를 판단해야 한다...
문제를 읽어보면, 여기가 핵심이다. 뱀의 머리를 추가 하거나, 꼬리를 삭제하거나의 동작을 해야 한다.덱을 사용해야 겠다. 는 것을 정해야 한다. 오로지 머리를 가지고만 진행하는 것이므로, 다른 몸의 꼬리까지에 대해서 이동해야 겠다는 생각을 할 필요가 없다. idx 번호
ㅇㅇ
temp에다가 넣어놓고, origin에다가 갱신하는거는 문제가 있따.1번. temp값 사용은 매번 초기화해야 하고, origin과 동일한 메모리 1개가 더 필요하다. 2번. : 원본값들 도 처리해야 한다. 그래서 그냥 횢
역시나 문제에서 주어지는 크기만큼만 vector 확보해서 했는데.문제가 진행하면 할수록 크기가 커진다.힌트: 2번째 설명의 표가 나중에는 크기를 맞추기 위해서 0으로 채워진다. 마지막 4번째 힌트를 보면, 3번 도표와 동일하게 크기가 커진다. 문제에서는 최대크기가 10
3개 놓쳤다.1) 매번 mapping 을 한개의 행 또는 한개의 열만 해야 한다.그런데 위에다가 해버려서 누적된 상태에서 진행함. 2) 갱신할때 초기화를 하지 않음.: 우리가 큰 배열에다가 하는 것이므로, 반드시 초기화를 하자. 초기화를 해야 하는 예시: 3이 없어졌다
무려 1000조이다... 이거 long long으로 안될거 같은데???헐;;; 9223경??!! ㅋㅋㅋ
: n \* m 의 모든 정점에서 1인 타겟 pos를 얻어서 bfs를 순회해서 0인 지점을 카운팅하기에는 시간복잡도가 굉장히 커진다. 타겟을 잡더라도 4방면으로 bfs를 시도해야 한다. : bfs 비용은 n X m 이기 때문에 최종적으로 n X m X n X m 의 시
y 좌표에 여러개의 친구들을 넣어야 한다면 어떻게 할것인가? 1,2 에 3개를 넣어야 한다. 코드 구현이고, 초기화 상태이고 이때는 플레이어가 4명이다.첫번째 턴이 완료되면 이렇게 된다. 이후 플레이어들은 2명이 되는 것일까? 2번재 턴을 보면, 이렇게 움직인다. :
: 문제를 완벽히 이해하지 못했다.위의 문제는 모든 물고리를 먹는 것이 아니다. 입력 2번을 보면 왜 14가 나오는지 의문이다.: 문제를 다시 한번 읽어봐야 한다.
: 구현은 했는데, 백트래킹 문제다.상어의 위치와 dir이 정해지면 상어의 dir 변경되어야 한다. \-> 이거를 놓침.
: 방문처리에 대해 생각해보자.ㅇㅇ
특정값을 이용해서 입력으로 주어진 v에다가 어떠한 처리를 해서 특정값이 맞는지를 확인하는 문제이므로 이분탐색 최적화 결정 문제다. 문제에서 n을 초과해도 된다고 한다. 잘못된 코드 \-> 구분지었는데 왜 틀렸냐면 문제에서 n개보다 많이 만드는 것도 n개를 만드는 것에
ㅇㅇㅇㅇㅇ
맨 처음에 왜 그런지는 모르겠지만, 1 번 3번 공장을 무시하고... 2 3 2 번이 마지막이니까. 2번과 3번 공장간에 경로를 생각했다.. ㅡㅡ;;; 문제에서 구하고자 하는 바는 2개의 공장을 가로지를 수 있는 물품의 최대값이다. 주어진 입력예제를 통해서 그럼 그냥
: 로봇청소기가 청소를 하면 나는 1로 설정했는데, 1은 벽이다. 다른 값으로 설정해야 한다. 벽인 상태값만 부딪쳤을 때 멈추게 해야 한다. : 여기서 멈출 수 있다는 것이다. 문제에서도 로봇청소기가 청소를 했을 때 벽이 된다. 는 말 이없다. 인덱스 벗어날까봐 걱정했
일단은 입력값이 1 ~ 8 이므로 다 넣어보면, 1에서 답이 나오지 않는다. 코드를 통해서 생각해보자. : 여기인데, 지금의 코드는 이미 소수인 2,3,5,7을 가지고 진행한다는 생각으로 작성한 것이다. 즉 2,3,5,7 이 소수인지를 반영하지 못한 것이다. 이렇게 해
전체 문자열의 길이를 구하는 함수인데 여기서 중요한 점은. for문에서는 변수를 여러개 정의할 수 있지만, 타입은 한개로 해야 한다는 부분이다. mul 은 어차피 1씩 증가해서 따로 int로 했는데 오류 발생함.문자열에서 23번째 수는 6이고, 대입되는 값은 16 이다
생각해보기: m개 이하로 구간을 나눌 수 있다고 하는 거는 아래의 3개로 나누는 것뿐 아니라, 2개 1개로 구간을 정할 수 있다는 건데. 일단은 3개로 한번 나누어보았다.앞에서부터 오름차순으로 하면 이런 경우인데. 독특한 갯수가 나오는데 6개, 5개, 4개 순으로 ..
: 왜 1100000000 이 아닐까??? 이거여야 하는데? 최소 x, y 이다. 넘어서도 된다는 것이다.. 문제를 잘못 읽어서 예상된 결과와 다를 때, 잠깐만 진정하고 문제를 차근 차근 읽어보자.
: 조합 문제가 아니다! \-> 중복 조합 문제이다. 겹친다.: 그리고 문제에서는 합산한 결과를 구하는 것이기 때문에 \-> 처리를 해야 함.ㅇㅇ
251005 일요일 틀림.
고정되어 있는 갯수의 조합을 구하는 것이 아니라서 나는 sort 한 후에, 비트마스킹을 사용함.
문제를 보면 이렇다.1) 임의의 위치에서 시작하므로 시작점은 총 25개다.2) 한번의 순간에 선택하는 경우는 총 상하좌우 4가지이다.3) 그거를 최대 5번 정도 이동이 가능하다.\-> 25 4의 5승 : 25 2의 10승 : 25 \* 1024\-> 25000번이므
: n개 중에서 3개를 뽑는 조합문제이다. 3개만 뽑는 것이므로 굳이 재귀를 만들 필요 없다.조합하면 안되는 번호를 check변수 처리하고, 조합 얻어내는 마지막에 체크 조건 처리함.
n개 중에서 3개를 뽑는건데, 조건으로는 3개의 친구가 모두 친구 관계여야 한다. 조건을 빼고 n개 중에서 3개를 뽑으면 4000의 3승이므로 시간초과다. \-> 다른 방법을 생각해야 함.3명의 관계가 모두 친구 관계라는 점을 이용해서 접근해야 한다. a와 b가 친구
편협한 시선으로 문제를 바라봤다. 첫번째 생각. : 큰 쪽에서부터 작은쪽으로 진행하려고 함.(1,2) 에서 (5,6) 지점까지 돌린 후 , 작은 사각형 (2,3) 에서 (4,5) 까지를 어떻게 코드로 작성할까? 생각을 함. 그냥 3,4,2 를 중심으로 해서 생각하기만