첫 n개의 자연수가 정렬되지 않은 상태로 들어 있는 큐(Queue)가 있다고 가정해 보겠습니다. 이 문제의 목표는 주어진 큐의 요소들을 스택을 중간 버퍼로 활용하여 다른 큐에 비내림차순(non-decreasing)으로 정렬할 수 있는지 판별하는 것입니다.허용되는 연산이 문제를 해결하기 위해 다음 세 가지 연산만 사용할 수 있습니다.스택에 요소를 push 하거나 pop 하기주어진 큐에서 요소를 삭제(dequeue)하기다른 큐에 요소를 삽입(enqueue)하기예를 들어 입력이 Que = [6, 1, 2, 3, 4, 5]라면 출력은 Tr
숫자로 이루어진 배열과 하나의 숫자 k가 주어졌을 때, 이 배열을 모든 쌍의 합이 정확히 k가 되도록 나눌 수 있는지 확인해야 하는 문제입니다.예를 들어 입력이 arr = [1, 2, 3, 4, 5, 6], k = 7이라면, (2, 5), (1, 6), (3, 4)처럼 각 쌍의 합이 7이 되는 짝을 만들 수 있으므로 결과는 True입니다.문제 해결 접근 방식배열이 이미 오름차순으로 정렬되어 있다는 점을 활용하면, 투 포인터(Two Pointer) 기법으로 효율적으로 해결할 수 있습니다. 가장 작은 값과 가장 큰 값을 차례대로 짝지으
문제 개요두 개의 문자열 s와 t가 주어졌을 때, 특정 조건 하에서 한 문자열을 다른 문자열로 변환할 수 있는지 확인하는 문제입니다. 변환 규칙은 다음과 같습니다.이미 모음인 문자는 반드시 다른 모음으로만 변경할 수 있습니다.이미 자음인 문자는 반드시 다른 자음으로만 변경할 수 있습니다.즉, 모음을 자음으로 바꾸거나 자음을 모음으로 바꾸는 것은 허용되지 않습니다. 이러한 규칙 안에서 s를 t로 변환할 수 있는지(혹은 그 반대도 동일하게 적용됨) 판별해야 합니다.예시예를 들어 s = udpmva, t = itmmve라고 가정해 보겠습
문제 개요소문자로 이루어진 두 문자열 s와 t가 주어졌을 때, 다음과 같은 제약 조건을 만족하며 s로부터 t를 생성할 수 있는지 확인해야 합니다.t의 각 문자는 s에 존재해야 합니다. 예를 들어 t에 a가 두 개 있다면, s에도 정확히 두 개의 a가 있어야 합니다.t의 어떤 문자가 s에 없다면, 해당 문자보다 ASCII 값이 하나 및 둘 앞선 두 문자가 s에 있는지 확인합니다. 예를 들어 f가 t에는 있지만 s에는 없다면, s의 d와 e를 조합하여 f를 대신 만들 수 있습니다.예를 들어 입력이 s = pghn, t = pin이라면
두 개의 문자열 s와 t가 주어졌을 때, t를 왼쪽 또는 오른쪽 어느 방향으로든 정확히 2칸 회전하여 s를 만들 수 있는지 확인하는 문제입니다.예를 들어 입력이 s = kolkata, t = takolka라고 가정해 보겠습니다. 이 경우 takolka를 왼쪽으로 두 번 회전하면 kolkata를 얻을 수 있으므로 출력은 True가 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 통해 해결할 수 있습니다.s와 t의 길이가 다르면 False를 반환합니다.right_rot과 left_rot이라는 빈 문자열을 준비합니다.t의 길이를 l에
개요주어진 문자열의 문자들을 임의로 재배열했을 때, 그 결과가 회문(palindrome)이 될 수 있는지 판별하는 문제입니다. 여기서 회문이란 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 의미합니다.예를 들어 입력 문자열이 s = aarcrce라고 가정해 보겠습니다. 이 문자들의 순서를 바꾸면 racecar라는 회문을 만들 수 있으므로, 출력은 True가 됩니다.접근 방식이 문제를 해결하는 핵심 아이디어는 문자의 등장 빈도에 있습니다.회문이 성립하려면 대칭 구조가 필요합니다.길이가 짝수인 회문이라면 모든 문자가 반드시 짝수 번 나타나
두 개의 문자열 s와 t가 주어졌을 때, 문자열 s를 몇 번 이어 붙여야(반복해야) 문자열 t를 만들 수 있는지 구하는 문제입니다. 만약 s를 아무리 반복해도 t를 생성할 수 없다면 -1을 반환합니다.예를 들어 s = tom, t = tomtomtom이라고 가정해 보겠습니다. 이 경우 tom을 3번 이어 붙이면 tomtomtom이 되므로 출력 결과는 3입니다.문제 해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.t의 길이가 s의 길이로 나누어 떨어지지 않으면-1을 반환합니다.cnt := (t의 길이 ÷ s의 길이)의
문제 이해하기두 개의 문자열 s와 t가 주어졌다고 가정해 봅시다. 우리는 s에서 t를 원하는 만큼 여러 번 삭제할 수 있으며, 한 번에 하나의 t만 존재한다고 가정합니다. 목표는 t를 필요한 만큼 반복해서 제거했을 때 s를 완전히 비울 수 있는지 판단하는 것입니다.예를 들어 s = pipipinnn, t = pin이라면 결과는 True입니다. pipipinnn에서 pin을 제거하면 pipinn이 되고, 다시 pin을 제거하면 pin이 되며, 마지막으로 한 번 더 제거하면 빈 문자열이 되기 때문입니다.해결 접근 방법이 문제는 다음 단
문제 개요문자열 s가 주어졌을 때, 이 문자열 안에 짝수 길이의 회문(palindrome) 부분 문자열이 존재하는지 확인해야 합니다.예를 들어 입력이 s = afternoon이라면, afternoon에는 짝수 길이의 회문인 noon이 포함되어 있으므로 결과는 True가 됩니다.접근 방식핵심 아이디어는 매우 간단합니다. 길이가 2 이상인 짝수 길이 회문은 반드시 가운데 두 문자가 서로 같아야 한다는 성질을 이용합니다. 따라서 문자열 전체를 탐색할 필요 없이, 인접한 두 문자가 동일한 경우가 하나라도 존재하는지만 확인하면 됩니다. 그
문제 개요문자열 s가 주어졌을 때, 이 문자열이 aⁿbⁿ 패턴을 따르는지 확인해야 합니다. aⁿbⁿ 패턴이란 문자 a가 n번 연속으로 나타난 뒤, 문자 b가 정확히 n번 연속으로 나타나는 형태를 의미합니다.예를 들어 n = 3이라면 문자열은 aaabbb가 됩니다. 즉, a의 개수와 b의 개수가 정확히 같아야 하며, 모든 a는 모든 b보다 앞에 위치해야 합니다.따라서 입력이 s = aaaaabbbbb라면 이 문자열은 a⁵b⁵ 형태를 따르므로 결과는 True가 됩니다.해결 전략이 문제는 다음 단계를 통해 해결할 수 있습니다.size :
문제 개요 소문자로만 이루어진 문자열 s가 주어졌을 때, 최대 한 글자를 삭제해서 s를 유효한 문자열로 바꿀 수 있는지 확인하는 것이 이번 문제의 목표입니다. 여기서 유효한 문자열이란, 문자열 안에 등장하는 모든 고유 문자의 빈도(등장 횟수)가 서로 같은 문자열을 뜻합니다. 예를 들어 입력이 s = xyyzx라면 결과는 True입니다. z 하나만 삭제하면 문자열이 xyyx가 되고, x와 y가 각각 두 번씩 등장해 빈도가 일치하기 때문입니다. 접근 방법 풀이의 핵심은 각 문자의 등장 횟수를 먼저 계산한 뒤, 빈도 값들을 종류별로 묶
문제 개요 이진 문자열 s와 정수 m이 주어졌을 때, 해당 문자열 안에 m개의 연속된 1 또는 m개의 연속된 0이 존재하는지 확인해야 하는 문제입니다. 예를 들어 입력이 s = 1110111000111, m = 3이라면, 문자열에 세 개의 연속된 0(000)과 세 개의 연속된 1(111)이 모두 존재하므로 결과는 True가 됩니다. 해결 접근 방식 이 문제는 문자열을 한 번만 순회하면서 현재 위치까지 이어진 연속 문자의 개수를 추적하는 방식으로 효율적으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다. str_size에
문자열 s가 주어졌을 때, 해당 문자열이 콜린드롬(colidrome)인지 판별해야 합니다. 콜린드롬이란 길이 6짜리 팰린드롬(회문) 여러 개를 이어 붙여 만든 문자열을 의미합니다.예를 들어 입력이 s = aabbaamnoonm라면 결과는 True가 됩니다. 이 문자열은 aabbaa와 mnoonm이라는 두 개의 길이 6 팰린드롬으로 구성되어 있기 때문입니다.문제 해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.먼저 문자열 s의 길이가 6의 배수인지 확인합니다. 6의 배수가 아니라면 콜린드롬일 수 없으므로 False를 반
문자열 s가 주어졌을 때, 해당 문자열이 아이소그램(Isogram)인지 판별하는 문제를 살펴보겠습니다. 아이소그램이란 모든 문자가 정확히 한 번씩만 등장하는 문자열을 의미합니다.예를 들어 입력이 s = education이라면 출력은 True가 됩니다. education의 모든 문자(e, d, u, c, a, t, i, o, n)가 각각 한 번씩만 나타나기 때문입니다.해결 접근 방식이 문제는 다음 단계를 통해 해결할 수 있습니다.빈 리스트 char_list를 생성합니다.문자열의 각 문자를 순회하면서 다음을 확인합니다.문자가 알파벳인
문제 정의두 개의 문자열 s와 t가 주어졌을 때, s가 t의 접미사(suffix)인지 확인하는 문제입니다. 접미사란 어떤 문자열의 끝부분에 해당하는 부분 문자열을 의미합니다.예를 들어, 입력이 s = ate, t = unfortunate라고 한다면, unfortunate는 ...nate로 끝나기 때문에 ate가 그 접미사에 해당합니다. 따라서 출력은 True가 됩니다.해결 접근 방식이 문제는 두 문자열을 뒤에서부터 한 글자씩 비교하는 방식으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다.s_len := s의 길이로 설정t_
문제 설명두 개의 소문자 문자열 s와 t가 있다고 가정해 봅시다. 사람이 키보드로 이름을 입력할 때, 가끔 모음 키를 실수로 오래 누르게 되어 해당 모음이 한 번 이상 반복되어 입력되는 경우가 있습니다. 우리가 확인해야 할 것은 문자열 t가 문자열 s를 타이핑한 결과일 가능성이 있는지 여부입니다.예를 들어, s = mine, t = miiine인 경우를 생각해 보겠습니다. 이때 출력은 True입니다. 왜냐하면 모음 i가 세 번 반복되었고(키를 오래 누른 것), 나머지 문자들은 정상적으로 입력되었기 때문입니다.접근 방법 및 알고리즘이
문제 개요 세 개의 각도가 주어졌을 때, 이 각도들로 양의 넓이를 가지는 삼각형을 만들 수 있는지 판별하는 문제입니다. 예를 들어 입력이 a = 40, b = 120, c = 20이라면, 세 각의 합이 40 + 120 + 20 = 180이므로 결과는 True가 됩니다. 해결 접근 방법 이 문제는 다음과 같은 논리로 해결할 수 있습니다. 세 각도 a, b, c가 모두 0이 아니고, 그 합(a + b + c)이 정확히 180인 경우: (a + b) >= c 또는 (b + c) >= a 또는 (a + c) >= b
문제 이해하기길이가 2인 문자열 s와, 모든 단어의 길이가 2인 단어 목록 w가 주어졌다고 가정해 봅시다. 이때 w에 있는 단어들을 서로 이어 붙여서 만든 문자열 안에 s가 부분 문자열로 포함될 수 있는지 확인해야 합니다.예를 들어, 입력이 s = no, w = [ol, on, ni, to]라면 출력은 True입니다. 단어들을 onol처럼 이어 붙이면 그 안에 no가 포함되기 때문입니다.해결 접근 방식이 문제는 다음 단계를 통해 해결할 수 있습니다.n := w에 있는 단어의 개수char_0 := False, char_1 := Fal
숫자로 이루어진 리스트 nums가 주어졌을 때, 리스트의 모든 요소가 서로 중복되지 않고 고유한지 확인해야 하는 경우가 있습니다.예를 들어, 입력이 nums = [2, 3, 6, 5, 1, 8]이라면 모든 요소가 고유하므로 결과는 True가 됩니다.문제 해결 접근 방식이 문제는 집합(set) 자료구조를 활용하면 간단하게 해결할 수 있습니다. 집합은 중복된 값을 저장하지 않는 특성이 있기 때문입니다. 해결 단계는 다음과 같습니다.리스트의 길이를 n에 저장합니다.새로운 빈 집합 s를 생성합니다.0부터 n까지 반복하면서 리스트의 각 요소
문제 개요숫자 n이 주어졌을 때, 해당 숫자의 모든 비트가 1로 설정되어 있는지 확인해야 합니다.예를 들어 입력이 n = 255라면 출력은 True가 됩니다. 255의 이진수 표현은 11111111이기 때문입니다.해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.숫자가 0이면 False를 반환합니다.숫자가 0보다 큰 동안 다음을 반복합니다.숫자가 짝수, 즉 마지막 비트가 0이면 False를 반환합니다.숫자를 오른쪽으로 1비트 시프트하여 다음 비트를 검사합니다.반복문이 정상적으로 끝나면 모든 비트가 설정된 것이므로 Tru