Search

코딩테스트 준비문제 (string)

문자열 뒤집기 (Reverse String)

문제 설명

문자열을 뒤집는 함수를 작성하세요.
입력 문자열은 문자(character)의 배열 s 로 주어집니다.
이 함수를 작성할 때는 입력 배열을 직접 수정(in-place) 해야 하며,
추가적인 메모리는 O(1) 만 사용할 수 있습니다.

예제 1

입력: s = ["h","e","l","l","o"]
출력: ["o","l","l","e","h"]

예제 2

입력: s = ["H","a","n","n","a","h"]
출력: ["h","a","n","n","a","H"]

제약 조건

1 <= s.length <= 105
s[i]는 출력 가능한 ASCII 문자입니다.

정수 뒤집기 (Reverse Integer)

문제 설명

32비트 부호 있는 정수 x가 주어졌을 때,
x숫자 자리수를 뒤집은 값을 반환하세요.
단, 뒤집은 결과가 32비트 부호 있는 정수 범위 [-2³¹, 2³¹ - 1] 를 벗어나면
0을 반환해야 합니다.
환경상 64비트 정수(signed 또는 unsigned)를 사용할 수 없다고 가정합니다.

예제

예제 1

입력: x = 123
출력: 321

예제 2

입력: x = -123
출력: 321

예제 3

입력: x = 120
출력: 21

제약 조건

2³¹ <= x <= 2³¹ - 1
→ 즉, -2,147,483,648 ~ 2,147,483,647

문자열에서 첫 번째 고유 문자 찾기

(First Unique Character in a String)

문제 설명

문자열 s가 주어졌을 때,
반복되지 않는 첫 번째 문자인덱스를 반환하세요.
만약 그런 문자가 없다면 -1을 반환합니다.

예제

예제 1

입력: s = "leetcode"
출력: 0
설명: 'l' 문자가 첫 번째로 한 번만 등장합니다.

예제 2

입력: s = "loveleetcode"
출력: 2
설명: 'v' 문자가 첫 번째로 한 번만 등장합니다.

예제 3

입력: s = "aabb"
출력: 1
설명: 모든 문자가 두 번 이상 등장합니다.

제약 조건

1 <= s.length <= 10⁵
s소문자 영문자만 포함합니다 ('a' ~ 'z')

유효한 아나그램 확인하기

(Valid Anagram)

문제 설명

두 문자열 st가 주어졌을 때,
ts아나그램(anagram) 이면 true를,
그렇지 않으면 false를 반환하세요.
아나그램이란, 두 문자열이 같은 문자들을 같은 개수로 포함하고 있지만 순서는 달라질 수 있는 경우를 말합니다.

예제

예제 1

입력: s = "anagram", t = "nagaram"
출력: true

예제 2

입력: s = "rat", t = "car"
출력: false

제약 조건

1 <= s.length, t.length <= 5 * 10⁴
st소문자 영어 문자로만 구성됩니다 ('a' ~ 'z')

추가 질문 (Follow up)

만약 입력 문자열에 유니코드 문자(한글, 이모지 등) 가 포함된다면 어떻게 해결할 수 있을까요?

힌트:

고정된 26개의 알파벳 대신,
std::unordered_map<char32_t, int> 또는 std::unordered_map<wchar_t, int>
같은 해시맵 기반의 카운팅 방식을 사용하는 것이 좋습니다.

유효한 팰린드롬

(Valid Palindrome)

문제 설명

문자열 s가 주어졌을 때,
대문자를 소문자로 바꾸고,
알파벳과 숫자가 아닌 문자(공백, 기호 등)를 모두 제거한 후,
앞에서 읽으나 뒤에서 읽으나 같은 문자열인지 확인하세요.
조건을 만족하면 true, 그렇지 않으면 false를 반환합니다.
알파벳과 숫자(Alphanumeric characters) 만 비교 대상입니다.

예제

예제 1

입력: s = "A man, a plan, a canal: Panama"
출력: true
설명: "amanaplanacanalpanama"는 앞뒤로 같은 문자열입니다.

예제 2

입력: s = "race a car"
출력: false
설명: "raceacar"는 팰린드롬이 아닙니다.

예제 3

입력: s = " "
출력: true
설명: 공백만 있는 경우, 처리 후 빈 문자열 ""이 되며,
빈 문자열은 팰린드롬으로 간주합니다.

제약 조건

1 <= s.length <= 2 * 10⁵
s출력 가능한 ASCII 문자만 포함합니다.

문자열을 정수로 변환하기 (myAtoi)

문제 설명

문자열 s가 주어졌을 때, 다음 규칙에 따라 32비트 부호 있는 정수로 변환하는
myAtoi(string s) 함수를 구현하세요.

변환 알고리즘

1.
공백 무시
문자열 앞의 모든 공백(' ')을 건너뜁니다.
2.
부호 확인
다음 문자가 '+' 또는 '-'일 경우, 해당 부호를 기록합니다.
아무 부호도 없으면 양수로 간주합니다.
3.
숫자 읽기
처음 나타나는 숫자부터 읽기 시작하고,
숫자가 아닌 문자를 만나면 멈춥니다.
앞의 0은 무시되며, 숫자가 하나도 없다면 결과는 0입니다.
4.
범위 제한
최종 결과가 32비트 부호 있는 정수 범위
[-2³¹, 2³¹ - 1]을 벗어나면,
해당 범위 안에서 반올림(clamping) 합니다.
5.
최종 결과 반환

예제

예제 1

입력: "42"
출력: 42

예제 2

입력: " -042"
출력: -42

예제 3

입력: "1337c0d3"
출력: 1337

예제 4

입력: "0-1"
출력: 0
숫자 '0'까지만 읽고, '-'에서 중단됩니다.

예제 5

입력: "words and 987"
출력: 0
첫 글자가 숫자가 아니기 때문에 아예 읽지 않고 종료됩니다.

제약 조건

0 <= s.length <= 200
s는 영어 대소문자, 숫자(0~9), 공백 ' ', 부호 +, , 마침표 . 만 포함합니다.

문자열 찾기 구현하기 (strStr())

문제 설명

두 개의 문자열 needlehaystack이 주어졌을 때,
haystack 안에 needle이 처음 등장하는 인덱스를 반환하세요.
만약 needlehaystack에 포함되지 않는다면 -1을 반환하세요.

예제

예제 1

입력: haystack = "sadbutsad", needle = "sad"
출력: 0
설명: "sad"는 인덱스 0과 6에서 나타나며, 첫 번째 등장은 0이므로 0을 반환합니다.

예제 2

입력: haystack = "leetcode", needle = "leeto"
출력: 1
설명: "leeto""leetcode" 안에 없으므로 1을 반환합니다.

제약 조건

1 <= haystack.length, needle.length <= 10⁴
haystackneedle영문 소문자만 포함합니다

가장 긴 공통 접두사 찾기

(Longest Common Prefix)

문제 설명

문자열 배열 strs가 주어졌을 때,
배열에 포함된 문자열들 사이의 가장 긴 공통 접두사(prefix) 를 찾아 반환하세요.
만약 공통 접두사가 없다면, 빈 문자열 "" 을 반환합니다.

예제

예제 1

입력: strs = ["flower", "flow", "flight"]
출력: "fl"
설명: 세 문자열 모두 "fl"로 시작합니다.

예제 2

입력: strs = ["dog", "racecar", "car"]
출력: ""
설명: 공통으로 시작하는 접두사가 없기 때문에 빈 문자열을 반환합니다.

제약 조건

1 <= strs.length <= 200
0 <= strs[i].length <= 200
각 문자열 strs[i]소문자 영어 알파벳만 포함합니다 (비어 있지 않은 경우)