단순히 어디까지 칠했는지를 판단해서 칠하고자하는 부분을 갱신해주면 된다.
먼저 완성되으면 0을 반환 해야한다는 점으로 잘못 생각해서 시간을 많이 버렸다.문제의 핵심은 이 틱택토가 규칙을 따라서 진행이 되었는가를 판별한다는 것이다. 가장 핵심적인 판별법은 ooo로 완성이 되었을때는 o의 개수가 x의 개수보다는 하나 많아야하고xxx로 완성 되었
dfs 또는 bfs를 사용하는 문제이다. 본인은 bfs를 사용하여 풀었다. 간단하게 시작지점에서 레버까지의 최단거리, 레버에서 출구까지의 최단거리 합을 리턴해주면 되고, 접근이 불가능하게 된다면 -1을 리턴하면 된다.
호텔의 방의 최소 필요 개수를 구하는 문제이다. 단순히 곂치는 시간을 고려해 풀면 된다.위의 코드에서는 stoi를 따로 구현했지만 바로 내장함수를 사용할 수 도 있다.
bfs에 친숙하다면 쉽게 풀 수 있는 문제이다. 다른 방식으로도 구현 가능하지만(dfs와 같은 다른 flood fill 방식) bfs가 편할거같아서 다음과 같이 구현했다.
스택을 사용하여 접근하면 되는 문제이다. 앞에서 부터 뒤로 접근해도 되지만 필자는 뒤에서 부터 접근하는 풀이로 문제를 해결하였다.
queue를 이용하여 문제를 풀면된다. 2차원 bfs라 생각하면 편하다.
처음에 이중for문이 안되는 줄알고 다음과 같이 풀었다.또한 1,2,3,4 미터에 앉을 수 있다고 착각하여 시간을 버렸다.이에 대한 예시로 100 100 끼리는 짝꿍이지만 100 300은 짝꿍이 아닌것이다.
상당히 많이 해맸고 개인적으로 어려웠던 문제이다. 여러번 잘못 생각해서 풀이도 난잡해지고 결과도 이상해졌다. 필자의 풀이는 좀 별로인듯 하여 다른코드 또한 첨부한다.좋은 코드
문제를 읽었을 때 dfs로 접근하여 이모티콘들에 대해 순차적으로 할인되어진 값을 정리하여 문제 조건에 만족하는 사람들을 구하는 방법이 좋을 것 같아서 다음과 같이 문제를 풀었다. dfs함수 안에서 각 이모티콘에 대한 할인율과 할인된 가격을 price 백터 안에 정리하고
간단하게 해당 자리수에서 최소로 0을 만들어주면 되는 문제이다. 이때 주의해야할 점은 다음 자리수가 5보다 크고 현자리수가 5일때는 올려주는것이 더 적게 이동한다는 점이다.이에 대한 예시는 다음과 같다.65 // 현자리 5 높은자리 >= 5 일때70 (5)100 (8)
bfs문제인데 한칸씩 동서남북을 확인하는게 아니라 장애물 또는 벽을 만날때 까지 쭉 직진하는 방식으로 체크하면 된다. 비슷한 게임으로는 포켓몬스터 빙판길 퍼즐로 생각하고 이해하면 문제가 어렵지않다. 기존 bfs와 마찬가지로 방문체크를 해주며 조건을 만족할때 이동횟수를
개인적으로 생각하기 좀 어렵고 번거로웠던 문제이다. 치는공과 맞춰야하는 공의 위치를 잘 선정해서 풀면 쉽게 풀수 있다. 필자의 풀이는 별로이니 아래 코드를 참고하는것을 추천한다...좋아보였던 풀이!!!
문제자체를 이해하는데 오래걸렸고 처음풀이와 두번째풀이를 각각 직접 문자열로 만들어서 체크, 단순 재귀로 풀어서 시간초과가 나와 실패했었다.때문에 구간을 나누어서 0일때는 아예 재귀를 안타게끔 풀이를 바꿔서 풀었다.n = 1: 11011n = 2: 11011 11011
col 번째 컬럼값들을 기준으로 정렬하고 주어지는 매개변수 row_begin 에서 row_end까지 조건을 만족시켜준 값들의 xor값을 구하면 되는 문제이다.
dfs방식을 사용하면 편하게 접근할 수 있다. 곡괭이와 광물에 따른 값을 더해 나온 결과값들 중 최소값을 구하면 되는 문제이다. 크게 어렵지는 않지만 생각보다 까다롭다.
우선순위큐라는 자료구조를 알고있다면 상당히 쉽게 풀수있는 문제이다. 본인은 이를 몰라서 고생을 하다가 이번기회에 공부하게되었다.간단히 설명하면 우선순위큐는 우선순위가 높은 데이터가 먼저나가는 자료구조로 힙을 기반으로 구현되어져 있다.
처음에 짠 코드는 효율성 테스트에서 시간초과 실패가 되었다. 단순히 이중 for문을 통한 코드이다.map을 사용하여 구현한 풀이는 효율성 테스트에서 통과하였다.
입을수 있는 옷들의 종류를 알아내면 된다. map을 사용하여 중복 종류의 옷들을 체크한다.공식 부분의 핵심을 예시로 들어보자.모자 : 2개상의 : 3개하의 : 1개 일때총 입을수 있는 가지수는(모자 2개 + 안쓰기) x (상의 3개 + 안입기) x (하의 1개 + 안입
이전 프로젝트가 끝나지 않았다면 기다렸다가 같이 배포한다는 점이 이 문제에서 신경써주어야하는 부분이다.때문에 deque에 순서대로 집어넣고 front프로젝트가 완료되지않은 프로젝트일때까지 빼주는 방식의 코드를 구현하였다.
기본적인 stack 문제이다.
deque에 넣어주고 조건대로 동작하게끔 하였다. 크게 어렵지 않은 문제이다.
다리가 버틸수있는 범위 내에서 계속 트럭을 넘기면 되는 문제이다. 주의해야할점은 트럭을 먼저 다리에 들여보내지않고 내보내야한다는 점이다.
스택에 쌓으며 가격이 떨어진다면 해당 가격의 인덱스에 현재 인덱스 - 해당 가격의 인덱스를 넣어주면 되는 문제이다. 크게 어렵지는 않다.본인의 풀이보다 더 간단한 풀이들도 존재하여 첨부한다.
우선순위 큐를 알고있다면 쉽게 풀 수 있는 문제이다.int main(void){ priority_queue pq;// 큰 값이 우선적으로 top에 있다. priority_queue<int, vector, greater> pq;// 작은 값이 우선적으로 top
2단계 문제 치고 상당히 복잡한 느낌이 들었다. 실제 코테에서 이런 문제가 나온다면 과감히 넘기는 편이 좋을거라는 생각도 들었다.간단하게 문제를 요약하자면 시작 시간을 기준으로 과제를 수행하다가 다른 과제를 시작해야하면 대기 스택에 하던 과제를 넣어놓고 주어진 과제를
처음에는 수열의 합을 저장해놓은 dp를 활용하여 이중 for문을 돌며 풀었는데 시간초과가 나서 다른 방법이 무엇이 있을까 고민하다가 queue를 활용하여 풀면 쉽겠다 생각하고 풀었다. 다른 사람들의 풀이를 보면 이중for문으로도 최적화를 잘하면 충분히 풀 수 있는 문제
compare함수를 어떻게 구현할지에 대해 고민을 좀 했던 문제이다. 결국에는 상당히 간단한 구조로 구현이 가능하다는 것을 알았다.
내림차순 정렬을 한뒤 해당 값이 인덱스 + 1(논문 개수) 보다 작으면 그때의 인덱스를 반환해 주면 된다.
주어진 숫자들을 조합하여 소수를 만들수 있다면 그 개수를 찾아서 리턴해주는 문제이다. dfs방식을 사용하여 완전 탐색을 하였다. 크게 어렵지는 않지만 조금 헤맬수도 있는 문제인것 같다.
간단한 dfs문제이다. 숫자를 골라서 + 또는 - 를 해준 결과값을 넘겨주는 방식으로 접근하면 편하다.
보통 넓이값을 비교해가면서 행열의 길이를 체크하는 풀이가 많았는데, 생각이 나는데로 풀다보니 다음과 같이 풀었다.이해하기 쉽게 예시를 들자면oooooXXooooo와 같이 4(행)x3(열)의 크기이면 중앙에 들어가는 yellow의 개수는 행-2 x 열-2 개이다.
dfs방식으로 풀었다. 모든 경우의 수들중에서 방문횟수를 갱신하는 방법이다. 기존 dfs와는 형태가 조금 다르긴하지만 크게 어렵지않다.
반례를 찾느라 좀 애를 많이 먹었다. s는 더 크지만 e가 일찍끝나는 경우에 대한 고려를 해주어야 한다.예시) \[0, 4, 5, 10, 6, 8, 8, 9] == 3풀이의 핵심은 오름차순 정렬을 한뒤 현재 타깃의 e보다 s가 작은 타겟들은 쭉 넘기는 것이다. 이때 주
문제는 간단히 1사분면 반지름이 d인 원 내부의 k배수의 점들을 구하면 되는 문제이다.맨처음에 sqrt를 사용해서 풀었는데 sqrt가 실수형 함수여서 오답이 난줄알고 이분탐색으로 sqrt를 구해서 풀었다. 근데 다시 풀어보니 잘 풀린걸 보면 처음에 조건을 잘못 생각해
귤의 크기에 관계없이 원하는 개수만큼 최대한 적은 종류를 선택하면 되는 문제이다. 무게당 몇개인지를 체크하고 개수가 많은 순으로 정렬하여 원하는 개수를 채워주면 가장 최소 종류를 알 수 있는 문제이다.
같은 배열 안에서의 공통 약수를 찾고 이 약수가 다른 배열의 약수가 아니면 되는 문제이다.때문에 굳이 모든 수들의 약수를 구할 필요는 없고 해당 배열의 가장 작은 최소값의 약수를 구해 조건을 만족시켜주면 된다.
큰원에 포함되는 점에서 작은 원 내부에 포함되는 점들을 빼면 되는 문제이다. 처음에 접근할때는 단순히 큰원에 포함되는 점 - 작은원에 포함되는 점 + 4를 해주었는데 이러한 풀이가 틀리는 이유는 예시로 작은원의 반지름이 5인경우이다.작은원의 반지름이 5인경우 원내부가
풀이 방법만 알게된다면 상당히 쉬운 문제이지다.문제 풀이의 핵심 개념은 비율이다. 사각형을 대각으로 쪼개었을때 나오는 삼각형에서의 정사각형의 개수를 구해 두배를 곱해서 리턴해줄것이다.삼각형에서 비율은 w : h = i : 대각선이 지나가는 점 이게 되는데 이를 수식으로
간단히 map에 원하는 상품과 그 개수를 등록해두고 map을 복제해서 10일 마다 해당 상품이 존재하면 개수를 지워준다음 원하는 품목을 다 구매하였는지 체크해주었다.
기존 dfs풀이 방식으로 접근을 하려했다가 형식이 달라져야하는 문제여서 생각이 조금 필요했다. 풀이의 근본적인 개념은 송전탑에 방문을 했는지를 체크해주며 방문하지 않았다면 전선에 연결된 다른 송전탑으로 재귀를 타며 방문을 표기해주는 방식이다. 이렇게 하면 방문한 송전탑
단순히 우박수열을 구현한 벡터를 들고 범위에서의 넓이를 구해주면 되는 문제이다.
잘랐을때 토핑의 개수가 같으면 되는 문제이다. unordered_map 을 사용한 풀이이다.
단순히 수열의 숫자를 하나하나 더해줘도 되긴하지만 미리 연속합을 구해놓고 사용하여 최적화 하였다.
주어진 카드 목록들을 서로 연결된 목록들로 묶었을 때 가장 큰묶음 두개의 곱을 반환해주면 되는 문제이다. 문제의 설명이 길어서 이해하기 조금 힘들 수 있지만 예시를 잘 생각해보면 금방 이해할 수 있다.
처음에는 굳이 queue를 사용안하고 벡터로 erase를 해가며 큐처럼 활용하였지만 시간초과가 되어서 queue를 활용하여 풀었다.핵심은 1번 큐를 기준으로 평균값보다 크면 값을 보내고, 작으면 가져온다는 점이다. 언제까지 반복할지에 대한 범위설정도 필요한데 처음에는a
dfs로 탐색조건을 잘주어서 풀어 시간초과에 유의하면 되는 문제이다. 점수차이가 같을때 가장 낮은 점수를 많이 쏜 경우를 구해야한다는 점을 생각안하다가 문제를 푸는데 시간을 많이 들였다...
주차비용을 계산할 때 분단위 요금이기 때문에 주어지는 사용시간을 분단위로 환산해서 계산하면 편하다. 크게 어렵지는 않지만 시간계산 문제여서 조금 까다로울 수 있다.
처음에 소수를 판별하는 부분을 에라토스테네스의 체로 구현하였는데 판별해야하는 수가 long long 범위의 수일 수도 있기때문에 각 수에대해 판별을 따로 해주어야한다. 이를 주의한다면 크게 어렵지는 않은 문제이다.
n의 범위가 10^7까지 여서 직접 2차원 배열을 만들어 잘라붙이는 방식으로 구현한다면 시간초과가 발생한다. 때문에 범위 내에서 조건에 맞추어 값을 넣어주면 되는 문제이다.위 풀이를 좀더 간결하게 하면 다음과 같다.
좌표를 구하는 방법은 문제 아래에 참고 공식을 사용하면 된다. 그래프의 좌표와 vector에 넣는 좌표가 다른것을 주의해야하며, 좌표이동을 해줄때 주의해주어야하는 문제이다. 또한 공식을 사용한 계산과정에서 long long 범위가 되는 연산이 존재한다. 이때문에 시간이
dfs를 통해서 순서대로 하나씩 만들어준후 주어진 word와 비교하여 맞다면 그때의 번호를 answer로 리턴하는 코드이다.
매개변수로 주어지는 place가 2차원 배열인줄 알고 착각하여 풀다가 시간을 많이 버린 문제이다. 항상 조건과 인자들을 잘 확인하고 문제를 풀자....
LRU 알고리즘이란 Least Recently Used로 가장 오랫동안 참조되지 않은 것을 선택하는 기법이라 생각하면 된다. 간단하게 deque로 구현해 보았다.
생각을 잘못해서 애를 먹은 문제이다.본인 풀이의 핵심적인 부분은 주어진 숫자 n보다 1이 큰 수는 2진법상으로 뒤에서 부터 처음으로 1이 나오는 지점부터 다르다.예시로 11001011 (203)이라는 수가 있을때11001100 (204)은 뒤에서 부터 3번째 지점부터
단순히 정해진 범위의 직사각형의 테두리를 회전시켜주고 이때 테두리값들중 가장작은값을 결과값으로 가져오면 되는 문제이다.
주어진 문자열 s를 왼쪽으로 1칸씩 회전 시키며 조건에 맞는 올바른 괄호식인지 판별을해 나오는 가지수를 리턴해주는 문제이다. 크게 어렵지않다.
처음에는 단순히 접근했다가 효율성 테스트에서 전부 시간초과가 발생하였다. 두번째 접근에서 unordered_map을 사용하여 지원자의 조건에서 -가 들어올수 있는 가지수들을(총 16가지) key로 넣고 value 벡터에 해당 스코어들을 넣는 방식으로 풀어서 통과하였다.
주어진 이진수 문자열에서 1의 개수를 다시 이진수 문자열로 바꾸어주는 방식을 반복하며 조건에 맞게 결과를 리턴해주면 되는 문제이다.
배열에서 반시계로 숫자를 넣으면 되는 문제이다. 범위를 넘어가는 부분에 대한 예외처리를 잘 해주면 되는 문제이다.
세트 메뉴를 구상하는 문제인데 조심해야하는 부분은 주어진 코스의 개수를 만족하는 조합중 가장 많이 골라진 세트메뉴를 answer에 넣어주어야 한다는 점이다.(여러개면 다 넣어준다.) 이부분을 제외하면 크게 어렵지 않다.
쿼드 트리와 같은 형태로 주어진 arr을 재귀를 통해 쪼갤수 없을때 까지 쪼개주면서 더 이상 쪼갤 수 없을 때의 데이터의 개수를 늘려 answer를 리턴하면 되는 문제이다. 전형적인 재귀문제의 느낌으로 크게 어렵지 않다.
주어진 인자들을 n!로 순열하는 방식에 대한 함수를 공부할 수 있었던 문제이다. next_permutation이라는 함수를 사용하였고 이함수는 보통 do while문과 같이 사용한다. next_permutation을 사용할 때 주의해야 하는점은 정렬된 벡터에 대해 사용
처음에는 직접 s에서 숫자들을 따로 빼주면서 튜플에대한 접근을 하려 하였지만 생각해보니 규칙적인 풀이가 존재하여서 다음과 같이 풀었다.해당 풀이의 핵심은 문자열에서 등장하는 숫자들이 중복되지않게 인자가 된다는 점과 많이 등장한 숫자일수록 튜플의 앞에 값이라는 점이다.예
주어진 조건에 맞춰서 재귀 방식을 구현해 주면 되는 문제이다. 문제가 복잡해 보이지만 설명을 차분히 읽고 따라하면 쉽게 풀 수 있는 문제이다.
주어진 문자열을 문자열 크기보다 작은 정수의 단위로 나누어서 압축가능한지를 확인하고 가장 작은 길이를 리턴해야하는 문제이다.문제가 이해하면 간단하지만 이해하기 좀 어려운 문제일 수 도 있다.겪었던 문제를 간단하게 설명하면마지막 예제 케이스인 "xababcdcdababc
11 x 11 크기의 공간 정중앙 부터 시작해서 최초로 이동한 경로의 개수를 세주는 문제이다.같은 경로로 이동했는지에 대한 판별을 잘 해주면 되는 문제이다.
주어지는 스킬 트리순서에 맞게 스킬이 짜여있는지를 판별하면 된다. 주의할 점은 주어진 스킬트리 외로 그냥 익힐 수 있는 스킬들도 존재한다는 점이다.
아래 코드와 비슷한 방식으로 접근하였으나 비트연산과 같이 간결한 코드를 발견하여 가져온 풀이이다. 기본적으로 해당 문제의 핵심적인 풀이는 속성들을 골랐을때 식별가능하면 정답을 1 올려주는 것인데, 이때 주의해야할 점이 해당 속성들이 식별가능한 최소단위여야 한다는 점이다
uid가 유저의 고유한 값이기 때문에 이를 기준으로 문제를 해결해 나아가면 되는 문제이다. 크게 어렵지않고 순서대로 해나가면 되는 문제이다.
처음에 탑승인원이 2명제한이라는 점을 까먹고 풀다가 시간을 날렸다. 생각해보면 가장 무거운 사람과 가장 가벼운 사람을 태워서 제한무게보다 작다면 보내면 되는 문제이다. 크게 어렵지 않다
시간초과 때문에 애를 먹은 문제이다. 풀이의 핵심은 가장 범위 내의 가장 큰수를 추가해주고 인덱스를 해당 인덱스로 고정해 구간을 설정해 준다는 점이다.
조이스틱을 좌우로 움직이는 부분에 대해 생각하는 것이 어려운 문제이다. 아직도 제대로 이해하지 못한 것 같은 문제이다. 해당코드는 다른 풀이를 참조하였다.풀이의 핵심적인 부분은 현재 i에서 다음 A가 아닌 문자의 idx를 구한후 i와 idx를 찍는 두가지의 경우에서 최
t길이만큼의 미리 말한 문자열을 구하면 되는 문제이다. n진수로 변환한 수를 문자열에 계속 더해주고 거기서 순서에 맞게 answer에 추가해주면 된다. 크게 어렵지 않은 문제이다.
주어지는 조건대로 head, number, tail로 나누어서 정렬을 해주면 되는 문제이다. 이 문제의 특이한 점은 head와 number가 같은 경우 들어온 입력 순으로 뱉어내주어야 한다는 점인데, 이때문에 sort대신 statble_sort를 사용해야한다.
주어진 조건대로 문자열을 인덱스화 하면서 압축하면 되는 문제이다. 크게 어렵지는 않다.
26, 28, 29 경우 풀이에 find를 사용하는경우 앞부분에서는 해당이 안될수도 있지만 뒷부분에서는 해당이 될수도 있는 점을 유의해야한다.m = "ABC" , 플레이시간동안 반복되는 음악 = "ABC30의 경우 음악을 플레이 시간보다 크거나 같게 반복시켜준후 플레이
풀고나니 크게 어렵지 않은 문제이지만 처음에 시간초과와 문제에 대한 접근을 잘못하여 애를 많이 먹은 문제이다.첫번째로 했던 수는 전체 board에서 블록을 맞추었을때 바로 없애주고 내려준 부분이다. 이와 같이 하게되면 안되고 먼저 보드에서 해당 블록들을 전부 없애준다음
구구절절 이상한 얘기를 하다가 결국에는 자카드 유사도를 구하라는 문제이다. 쉽게 말하면 자카드 유사도는 두 다중집합에서 교집합의 개수/ 합집합의 개수 를 의미한다. 교집합과 합집합이 둘다 0일때의 예외처리를 해주고 리턴해주면 되는 간단한 문제이다.
간단히 몇번째 라운드에 만날 수 있는지를 판별하는 문제이다. 본인의 풀이는 같은 구역에 있는지 아닌지를 판별하는 풀이이다.더 간단한 풀이가 있는 것 같아서 참고한다.
끝말잇기를 해서 탈락한 사람의 번호와 그사람이 몇번째 순서에 탈락했는지를 리턴해 주면 되는 문제이다. 주의할 점은 탈락하는 사람이 없을 수 도 있다는 점이다.
문제자체가 전형적인 bfs형식의 문제여서 입력조건의 범위가 10억이라는 점을 망각하고 그냥 풀어버려서 시간초과가 난 문제이다. 생각해보면 간단한 문제인데 사고가 굳어서 제대로 생각해내지 못한 문제이다. 아래코드가 간단하고 명확한 코드이다.
주어진 마을들이 이어진 경로를 바탕으로 1번 마을에서 K이하 시간까지걸리는 마을의 개수를 리턴해주면 되는 문제이다. 큰맥락은 어렵지 않지만, 자잘하게 예외처리를 해주어야 해서 조금 번거로울 수 있는 문제이다.
간단한 스택문제이다. 말그대로 짝지어서 들어오면 삭제해주면 되는 문제이다.
주어지는 숫자들의 전체 최소공배수를 구하면 되는 문제이다. 크게 어렵지 않다.
전형적인 체스 퀸을 겹치지않고 놓아야하는 dfs 문제이다. 크게 어렵지는 않지만 주의하여 코드를 짜야한다.
주어진 조건에 맞는 문자열 변환을 해주면 된다. 어렵지 않은 문제이다.
행렬의 곱셈을 구현하는 문제이다. 만들어 지는 벡터의 크기를 유의하며 풀면 크게 어렵지않은 문제이다.ixj 행렬과 kxl 행렬을 곱하면 ixl크기의 행렬이 나온다.
그 유명한 하노이의 탑 문제이다. 벡터에 결과를 담아서 리턴해주면 되는 문제이다. 재귀적 접근에 대한 이해가 있다면 풀 수 있는 문제이다.간단하게 설명하면 n 개짜리 하노이탑은 n-1개를 현재점과 목표지점이 아닌 지점(6 - go - to)에 두고 n번 원판(쌓인것중
유명한 피보나치 수열 문제이다. 재귀적 접근은 시간초과가 발생할 수 있으므로 dp를 통해 풀면 좋다.
주어진 두 정수 벡터에 대해서 각인자의 곱들을 합한 최소합을 구하는 문제이다. 주의할점은 한번 사용한 인자는 다시 사용불가 하다는 점이다.크게 어렵지 않다.
공백으로 나누어진 정수 문자열에서 최대 최소값을 다시 문자열 공백으로 나누어서 반환해주면 되는 문제이다.
처음에는 next_permutation이라는 함수를 사용하여 풀어보았지만 시간초과가 나서 다음과 같은 방법으로 풀었다.통과풀이에대한 풀이 예시를 간단하게 설명하자면예시로 n = 5, k = 51이라 가정하자.n=5일때 나올수있는 정렬 가지수는 5! = 120 이고 이를
연속되는 숫자합이 해당수와 같은지를 판별해서 그 개수를 반환해 주면 되는 문제이다. 크게 어렵지 않다.
문제조건에서 블록은 1부터 10,000,000까지의 숫자가 적혀있다고 되어있는데 이부분을 놓쳐서 애를 좀먹은 문제이다. 블록의 범위가 begin, end 범위와 동일한 줄알았다.풀이의 핵심은 해당 수를 나눌수있는 수들 중 10,000,000 보다작고 가장 큰수를 골라주
주어진 n칸에 딱 도착할 수 있는 경우의 수를 계산해서 조건에 맞게 리턴해주면 되는 문제이다. 문제의 흐름을 따라가다보면 i번째에 도달하는 경우는 i-1 에서 한칸이동 + i-2 에서 두칸이동 한 결과라는 것을 알 수 있다.
문제의 핵심은 이전까지의 최대합중 같은 열을 제외한 가장 큰 값들을 계속 구해가다 마지막에 가장 큰값을 골라주면 된다는 점이다.조건에 따른 더 간단한 풀이도 참조한다.
이진수 변환했을때의 1개수가 같고 n보다는 큰값중 가장 작은 값을 리턴하면 되는 문제이다. bitset을 사용하면 간단하다.bitset의 count 함수를 사용하면 더 간단하게 풀 수 있다.
2x2 정사각형을 찾는다면 주변값에서 가장 작은 값+1로 자신의 값을 갱신하여 구하는 방식이다. 방식을 알면 어렵지않다이해하기 쉽게 예시를 들자면와 같은 배열이 들어오면 다음과 같은 결과로 나온다.이중 가장 큰 값을 리턴해 주면 되는 것이다.
점화식을 만드는게 포인트인 문제이다. 하지만 점화식을 만드는것이 쉽지않은 어려운 문제이다.점화식은 다음과 같다.f(n) = 3f(n-2) + 2f(n-4) + 2f(n-6) + .... + 2;
문제의 핵심은 점화식을 만드는 것이다.f(n) 범째에 올수있는 패턴은 f(n-1) 에서 ㅣ 하나를 추가하는 것과 f(n-2)에서 =를 추가해주는 경우이다.
3진수로 변환하는 문제와 같은 유형의 문제이다. 3진수는 0 1 2 로 표현되지만 주어진 문제 조건처럼 1 2 4 로 표현하면 된다.
전형적인 최단거리를 구하는 문제이다. bfs를 사용하여 풀었다.
만들수 있는 조합에서 주어진 조건에 따르는 경우를 계산해서 리턴해주면 되는 문제이다. 함수들만 잘활용한다면 크게 어렵지 않은 문제이다.
그려진 그림의 범위를 구하고 그 개수와 최대 범위를 리턴해주면 되는 문제이다. 전형적인 넓이 구하기 문제이다. dfs 혹은 bfs를 사용하면 된다.
주어진 string 구조에 따라서 방향을 따라 만들어 지는 경로의 길이들을 반환하는 문제이다. 문제에 대한 해법을 생각하기 어려운 문제이다. 해당 풀이는 dfs를 통해서 경로를 하나씩 구해 냈다. 난이도에 비해 많이 어려운 문제이다.