코딩테스트/Programmers
[Programmers] 입문) 문자열 밀기 (IndexOf)
HONGGG
2023. 7. 19. 04:20
문자열 밀기
문제 설명
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < A의 길이 = B의 길이 < 100
- A, B는 알파벳 소문자로 이루어져 있습니다.
입출력 예
A | B | result |
"hello" | "ohell" | 1 |
"apple" | "elppa" | -1 |
"atat" | "tata" | 1 |
"abc" | "abc" | 0 |
입출력 예 설명
입출력 예 #1
"hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.
입출력 예 #2
"apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.
입출력 예 #3
"atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.
입출력 예 #4
"abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.
※ 공지 - 2023년 4월 24일 테스트케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.
이번 문제는 처음 해결방안을 생각하였을때 너무 복잡하게 생각하여 정답이 나오지 않을 것 같았다.
그래서 질문하기를 확인하여 아주 기가막힌 방법이라고 생각이 드는 코드를 발견했다.
using System;
public class Solution {
public int solution(string A, string B) {
if (A.Length != B.Length) return -1;
B += B;
return B.IndexOf(A);
}
}
이 코드는 찾아야하는 문자열을 이어붙여 IndexOf로 목표 문자열과 동일한 시작점을 찾는 것이다.
의문점은 IndexOf로 문자열을 찾지 못하면 자동으로 -1을 반환하는 경우이다.
이에 "낙방여우"님이 대답해주셨다.
원래 Integer의 한계가 대충 21억인데 그 값을 넘어가는 숫자는 음수로 반환되네요. 21억 다음부터 대충 42억까지의 숫자는 음수라는 거죠. 그렇게 범위가 계속되다가 진짜 한계인 18446744073709551615가 -1이 되고 이 숫자 다음에는 에러가 납니다.