BoBo World

[LeetCode] #20 - Valid Parentheses [Java][C++][Python]

문제 링크 1. 아이디어 소괄호, 중괄호, 대괄호들로 이루어진 문자열 s에 대해 유효한 문자열인지 판단하는 문제로 괄호 유효성 검사라는 면에서 스택을 활용하면 해결할 수 있다. 열린 괄호는 스택에 넣고 닫힌 괄호는 스택의 top과 같으면 top을 제거 후 반복, top과 다르거나 스택이 비어있으면 유효하지 않은 괄호열이다. 2. 복잡도 ...

[LeetCode] #136 - Single Number [Java][C++][Python]

문제 링크 1. 아이디어 정수 배열 nums에 대해 하나의 원소를 제외한 나머지 원소가 모두 두 번씩 등장할 때, 한 번만 등장한 원소를 구하는 문제다. 비트 XOR 연산을 활용하면 간단하게 해결할 수 있는데 같은 수에 대한 비트 XOR 연산은 0이 된다는 점에서 모든 원소를 전부 비트 XOR 연산을 하면 한 번만 등장했던 원소를 구할 수 있...

[Programmers] #120876 - 겹치는 선분의 길이 [Java][C++][Python]

문제 링크 1. 아이디어 여러 선분의 시작점과 끝점이 담긴 lines가 주어질 때, 두 개 이상의 선분이 겹치는 구간의 길이의 합을 구하는 문제로 좌표 범위가 -100 ~ 100으로 좁다는 점을 이용해 각 단위 구간마다 겹치는 선분의 개수를 센 다음 2개 이상 겹친 구간의 개수를 세면 그게 곧 정답이 된다. 좌표에 음수가 포함돼 배열 인덱스...

[Programmers] #120875 - 평행 [Java][C++][Python]

문제 링크 1. 아이디어 네 점의 좌표가 담긴 dots를 두 점씩 묶어 만든 두 직선 중 평행한 경우가 하나라도 있으면 1을, 없으면 0을 반환하는 문제로 네 점을 두 쌍으로 나누는 경우의 수 3가지를 전부 확인하면서 각 경우 두 직선이 평행한지 판별하면 된다. 평행 여부는 기울기를 구해 비교하면 되지만 실수 나눗셈이라 정밀도 오차가 생길 ...

[Programmers] #120868 - 삼각형의 완성조건 (2) [Java][C++][Python]

문제 링크 1. 아이디어 삼각형의 두 변이 주어질 때, 나머지 한 변이 될 수 있는 정수의 개수를 구하는 문제로 나머지 한 변이 가장 긴 변이 되는 경우와 그렇지 않은 경우 두 가지로 케이스 분류를 해보면 된다. 주어진 두 변을 $a$, $b$($a \le b$) 나머지 한 변을 $c$라고 할 때, $c$가 가장 긴 변이 되는 경우는 $c$...

[Codeforces] #2260C - Maximize XOR, Minimize Operations [C++]

문제 링크 1. 아이디어 x를 1 줄이고 y를 1 늘리는 연산을 몇 번이든 반복해 XOR을 최대화하고, 그중 연산 횟수가 최소인 경우를 찾아야 한다. 한쪽에서 줄어든 만큼 다른 쪽에 그대로 더해지므로 두 값의 합은 연산 전후로 항상 같다(sum = x + y). 합이 고정된 두 수의 XOR은 두 수가 겹치는 비트가 없을 때 최대가 되고 그 값...

[Codeforces] #2260A - Monocarp's Contest [C++]

문제 링크 1. 아이디어 n개의 문제들이 주어지며 각 문제는 쉬우면 0, 어려우면 1로 표현된다. 이때 두 문제의 위치를 변경할 수 있을 때 첫 번째 문제와 마지막 문제에 쉬운 문제를 두기 위한 최소 연산 횟수를 구해야 한다. 첫 번째 문제와 마지막 문제가 쉬운 문제인지 어려운 문제인지를 구하고 그 사이 문제들 중 쉬운 문제의 수를 구해 조건...