SOJ ONLINE JUDGE

문제 77

문자열 비교하기

내 상태
미제출
난이도
77번 문제 난이도 보기
Unranked
출제자
jinu829
시간 제한
1000 ms
메모리 제한
512 MB
77번 문제 태그 보기
구현

두 문자열 $S$, $T$가 주어진다.

두 문자열 중 더 긴 문자열의 길이를 구하고, 두 문자열의 길이가 같은지 확인하는 프로그램을 작성하라.

입력

첫 번째 줄과 두 번째 줄에 각각 알파벳 대소문자로 이루어진 문자열 $S$, $T$가 주어진다. $(1 \le \lvert S \rvert, \lvert T \rvert \le 100)$

출력

첫 번째 줄에 두 문자열 중 더 긴 문자열의 길이를 출력한다.

두 번째 줄에 두 문자열의 길이가 같다면 $1$을, 그렇지 않다면 $0$을 출력한다.

예제 입력 1

Hello
world

예제 출력 1

5
1

노트

세종대학교 인터페이스 스터디에서는 표준 문자열 처리 함수 strlen과 strcmp를 사용하지 않는다.

공식 해설 풀이 스포일러 보기 접기

비교하는 것은 문자열의 내용이 아니라 길이이다. 각 문자열을 처음부터 끝까지 읽으며 문자 하나마다 개수를 $1$씩 늘려 길이 $a,b$를 구한다.

첫 번째 줄에는 더 긴 길이인 $\max(a,b)$를 출력한다. 두 번째 줄에는 $a=b$이면 $1$, 아니라면 $0$을 출력한다. 두 문자열의 문자가 같은지는 확인할 필요가 없다.

시간복잡도와 입력 문자열을 저장하는 공간복잡도는 $O(\lvert S\rvert+\lvert T\rvert)$이다.

구현 · 언어별 풀이

C++ 구현

C++에서는 각 string을 범위 기반 반복문으로 순회하며 길이를 직접 셀 수 있다. strlen이나 strcmp 없이 두 정수 길이만 비교하고 출력한다.

C 구현

각 char 배열을 '\0'까지 순회하여 길이를 직접 센다. strlen과 strcmp는 사용하지 않는다. 길이가 더 큰 쪽을 선택하고 같은 길이일 때의 출력 규칙을 따르며 문자 사전순을 비교하지 않는다.

Python 구현

두 문자열을 각각 순회하며 카운터를 하나씩 올린다. 이 문제의 스터디 취지를 따라 길이를 직접 세고, 비교는 그 두 정수에만 한다. 문자열 대소 비교는 사전순이므로 사용할 수 없다.

Java 구현

각 문자열의 char 배열을 순회하여 길이 카운터를 직접 센다. 두 길이를 비교해야 하며 String.compareTo()는 길이가 아니라 사전순을 비교하므로 이 판정에 사용하지 않는다.

Rust 구현

두 문자열의 bytes()를 순회하며 길이를 직접 센다. 입력은 ASCII라 바이트 수와 문자 수가 같다. str의 Ord 비교는 사전순이므로 답 선택에 사용하지 않는다.

JavaScript 구현

문자열 길이를 직접 세는 학습 조건에 맞춰 for...of로 각 입력 줄을 순회하며 개수를 센다. 이 문제의 문자는 알파벳이므로 Unicode 글자 단위와 UTF-16 길이 차이는 없다.

let a = 0, b = 0;
for (const ch of s) a++;
for (const ch of t) b++;
console.log(Math.max(a, b));
console.log(a === b ? 1 : 0);

같은 길이인지는 문자열 내용 비교가 아니라 a === b로 판단한다. 첫 줄에는 긴 길이, 두 번째 줄에는 길이가 같으면 $1$, 다르면 $0$을 출력한다. 두 줄을 읽을 때 개행 문자를 길이에 포함하지 않는다. 길이 하나를 세기 위한 class나 문자열 복사본은 필요 없다.

제출

편집기에서 나가려면 Esc를 누른 뒤 Tab 또는 Shift와 Tab을 누르세요.