처음 문제를 읽었을 때 설명이 이해가 안 갔다.그래서 다른 블로그들의 글을 참고해서 풀었다.문제에서 주어지는 암호 코드를 보면 모든 암호코드가 "1"로 끝나는 것을 볼 수 있다.그래서 아래의 과정으로 코드를 짜면 되는데,nm 크기의 배열을 전부 입력받아 끝 인덱스(nm
간단하게 각 행의 합, 열의 합, 대각선의 합을 비교하면 되는 문제.
8\*8 배열을 순회하면서 가로, 세로로 회문 검사하면 되는 문제
문제에서는 0보다 작을 때 종료하라고 나와있지만 0보다 작거나 같을 때 종료되도록 짜야 통과가 나온다.
마름모 모양의 각 행의 시작 위치, 끝나는 위치를 변수에 기록해두면 쉽게 풀리는 문제
문자열 최대 길이가 1000자이기 때문에, 문자열의 길이만큼 반복문을 돌면서 찾는 문자열과 같은 길이의 부분 문자열을 만들고 찾는 문자열과 비교 후 같다면 count를 증가시키는 방식
N개의 퀸을 서로 공격하지 못하게 놓으려면 결국 각 행마다 하나의 퀸만 존재해야 하기 때문에 재귀함수 호출로 각 행마다 퀸의 위치를 정하는식으로 짜면 된다.시간복잡도는 O(N^3)정도가 나올 것 같다. 문제에서 N의 크기가 최대 10이기 때문에 시간초과가 나오진 않는다
1215 회문1 문제에서 약간만 변형하면 되는 문제 회문의 갯수를 구하는게 아니라 최대 회문 길이를 구하는 문제이다.
푸른 자성체의 경우 위로 끌리게 되기 때문에, 위에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.붉은 자성체의 경우 아래로 끌리게 되기 때문에, 아래에 반대되는 어떤 자성체도 없다면 교착상태가 발생하지 않게 된다.이것을 단순하게 생각하면 처음 자성체를
처음 메모리 상태에서 입력으로 주어진 메모리의 상태로 바꾸는 것은 아래와 같이 두가지 방법이 있다.1) 0,1,2...올라가는 순으로 바꾸는 방법2) 2,1,0...내려가는 순으로 바꾸는 방법2,1,0.. 이런 식으로 내려가는 순으로 바꾸는 방법은 2에서 이미 맞는 값
문제 설명대로 짜면 되는 구현문제
한번 방문한 정점은 다시 방문할 수 없기 때문에 dfs로 짜야 한다.bfs로 풀면 한번 방문한 정점을 다시 방문하게 된다.테스트 케이스를 직접 그려서 확인해 보면 어떤 정점을 먼저 방문할지에 따라 경로의 길이가 달라지는 것을 알 수 있다. 예를 들어 입력 데이터가 아래
각각의 재료들을 넣는 경우, 빼는 경우를 모두 다 해보면서 가장 높은 선호도를 구해주면 된다.
"앞에서부터 x의 위치 바로 다음에 y 개의 숫자를 삽입한다" 이 말의 뜻을 처음엔 잘못 이해하고 X+1위치부터 숫자를 삽입했는데 그게 아니라 X 위치부터 삽입하는 것이다.
구현 문제이기 때문에 문제 설명대로 짜면 된다. 최대한 깔끔하게 짜려고 하다 보니까 시간이 꽤 걸렸다. 구현 문제는 복잡할수록 코드 한 줄을 쓸 때마다 신중하게 짜야 할듯하다. 이동 명령이 들어올 경우 map에 전차의 위치를 갱신해 주어야 하는데 이 부분을 놓쳐서 시간
문제에서 주어진 대로 그대로 짜면 된다.1) 문제에서 "돌을 놓을 수 없는 곳은 입력으로 주어지지 않는다."라고 했기 때문에 입력으로 주어지는 위치(y, x)에 돌을 놓고 위, 아래, 왼쪽, 오른쪽, 위 왼쪽 대각선, 위 오른쪽 대각선, 아래 왼쪽 대각선, 아래 오른쪽
queue 두 개를 이용해서 같은 번호로 붙어있는 쌍을 제거한다.두 개의 수를 비교해 보고 같지 않다면 temp 큐에 넣고 만약 같다면 두 개의 수를 모두 queue에서 제거하는 식으로 짜면 된다.queue->temp->queue.. 이런 식으로 옮겨가며 쌍 제거를 반
각각의 수를 포함할지 안 할지를 해보면서 합이 K가 되면 카운팅 해주는 식으로 짰다.N이 최대 20이기 때문에 2^20으로 시간 초과가 나지 않는다.
parkingArr로 각 차량이 주차한 주차 공간 번호를 저장해두고 나중에 차가 주차장을 나갈 때 주차 요금 정산에 해당 정보를 이용한다.waitQueue는 만약 현재 빈 주차 공간이 없는데 차가 주차장에 들어올 경우 다른 차가 나올 때까지 주차할 수 없으므로 차량이
2차원 평면 제 1사분면 위의 격자점 (x,y)에 위 그림과 같이 대각선 순서로 점에 수를 붙인다.\-> 예시를 보면 각 행의 시작 값은 1,2,4,7... 이런식으로 증가한다.즉 더해지는 값이 1씩 증가한다. 1+1 = 2, 2+2 = 4, 4+3 = 7 그리고 첫
queue 2개에 숫자를 나눠서 저장하고 한 번씩 번갈아가면서 숫자를 poll 해준다.
P 개만큼 주어지는 어떤 정류장에 어떤 버스도 오지 않을 수 있기 때문에 HashMap에 없을 수 있다.(하나의 노선이라도 해당 정류장을 지나가야 map에 존재하기 때문)그래서 containsKey로 확인 후에 map에 없다면 0을 출력해 주어야 한다.
다음 손님이 오는 시간을 enterTime, 그리고 가장 최근에 붕어빵을 구운 시간을 beforeTime이라고 하자.그러면 진기가 다음 손님이 오기 전까지 붕어빵을 구울 수 있는 시간은 enterTime - beforeTime이다.진기가 남아있는 시간 동안 구울 수 있
nCr = n! / ((n-r)!\*r!)문제에서는 nCr을 구해서 1234567891로 나눈 나머지를 구하는 것이다.그런데 문제는 n이 최대 1000000이기 때문에 모듈러 연산을 이용하여야 하는데 나눗셈에서는 모듈러 연산을 사용할 수가 없다.모듈러 연산 (+,-,\
조합으로 풀면 되는 문제순서를 고려하지 않도록 for문 인덱스를 이전 인덱스+1에서부터 시작한다.
먼저 init()에서 경근이가 같다고 생각하는 알파벳을 같은 value 값으로 map에 넣어준다.입력받은 두 개의 문자열의 길이가 다른 경우는 다른 문자열로 취급한다.입력받은 두 개의 문자열의 길이가 같다면 한 글자씩 map에서 찾아 정숫값을 비교하고 만약 다르다면 다
dpi : i 값을 포함하는 최장 증가 부분 수열의 길이각 배열 값들을 보면서 이전까지 이어져온 최장 증가 부분 수열(A)의 마지막 값(=min)보다 크거나 같으면 해당 값을 최장 증가 부분 수열에 추가만약에 마지막 값보다 작다면 해당 인덱스의 앞부터 보면서 해당 값보
set: 카드의 정보를 나타내는 TXT를 저장, 카드가 중복되는지를 판단map: 각 카드를 카운팅set으로 모든 카드를 넣어두는데, 만약 이미 해당 카드가 존재한다면 ERROR해당 카드가 존재하지 않는다면 카드를 set에 넣어두고 map을 사용해서 카드의 카운트를 증가
9!의 경우의수를 전부 해보며 답을 구해주면 된다.
모든 사람들의 점수를 구해서 1등의 점수를 찾고, 1등 점수와 같은 점수인 사람들의 수를 세서 답을 구한다.
단순하게 배열에 값들을 저장하면서 정답을 구해주는 식으로도 풀 수 있지만,규칙성을 찾아서 풀 경우 더 간단하게 풀 수 있다.N=10, K=20일 때 1번 조의 팀원들의 점수는 아래와 같다.번호 1의 점수 1은 0 \* K, 번호 2의 점수 40은 2 \* K, 번호 3
두 카드 세트에서 한 장씩 더한 값이 각각 몇 번 나오는지 map에 저장한다.map을 value 기준으로 오름차순 한 다음 가장 많이 나온 수인 max 값과 나온 횟수가 같은 숫자를 찾아 list에 저장한다.list를 오름차순 해 정답을 출력한다.
입력으로 주어지는 값을 더하고 / 곱해본 다음 더 큰 값이 되는 경우로 연산해 준다.
설마 이렇게 푸는건가 했는데 맞아서 당황했던 문제..
자바 split에서 여러 구분자로 문자열을 나눌 때 "|"로 구분하면 된다.구분자로 특수문자를 줄 때는 앞에 "\\" 붙여주어야 한다.
배열을 하나 두고 각 문자 별로 다이아몬드로 배열 값을 변경해 주면 된다.
7개 중에 3개를 고르는 조합을 구해주되 중복을 제거해서 답을 구해야 한다.
dpi 부피가 j이고 i 번째 물건까지 고려했을 때 최대 가치 합i번째 물건이 정해진 부피인 j보다 작거나 같다면? -> 넣는 것 고려할 수 있음그럼 넣는 것과 안 넣은 방법 중 가치가 최대인 것을 구하면 물건 i 번까지를 고려했을 때 무게 j의 최대 가치 합i 번째
각 단어마다 포함하는 알파벳을 alphabet배열에 저장해둠1~N개의 단어의 조합을 구하는데 해당 조합이 모든 소문자 알파벳을 포함하는지 확인하고 포함한다면 count증가
prefix sum을 계산해서 연속 합을 구하는식으로 짰다. 적절하게 break를 해주지 않으면 시간초과가 나온다.
완전 이진 트리이기 때문에 항상 가운데 인덱스가 루트 노드라는 게 보장된다.재귀 호출로 루트를 노드를 계속 구해 가는 식으로 이진 트리를 재구성할 수 있다.
많은 개수의 빵을 사면 되기 때문에 두 개의 빵 중 가격이 저렴한 빵을 우선적으로 많이 사고 남은 돈으로 다른 빵을 사도록 하면 된다.
모든 문서 제목을 소문자로 변경하고 첫 글자를 기록 해둔 다음 전체 알파벳을 순회하면서 사용할 수 있는 문제 제목의 개수를 구해주면 된다.
N 개의 수를 오름차순 정렬하고 왼쪽으로 필요한 좌석 수(cur - bc) + 1(현재 내가 앉을 좌석) + 오른쪽으로 필요한 좌석 수(cur)로 필요한 전체 좌석수의 최솟값을 구해줄 수 있다.cur -> N 개의 수를 순회할 때 현재의 Ai 값bc -> 현재 내 왼쪽
입력 수의 범위가 long을 넘을 것 같아서 한 자리씩 더해주는 식으로 짰는데 bigdecimal을 쓰면 그냥 덧셈만 해주면 된다.
A + B 합이 N보다 크면 둘 다 구독하고 있는 사람들은 최소 A + B - N, 최고 min(A, B)이다.A + B 합이 N보다 작거나 같다면 둘 다 구독하고 있는 사람들은 최소 0, 최고 min(A, B)이다.
정해진 숫자 범위에서 미리 특별한 소수를 구해두고 같은 연산을 중복해서 하지 않도록 한다. 범위의 최솟값이 1이어서 별생각 없이 MIN 값을 1로 하였는데, 1은 소수에 포함되지 않으므로 MIN=1로 하면 테스트 케이스가 하나 틀린다.