오른쪽이든 왼쪽이든 밀어서 더 조금 이동하는 이동 칸수 반환 문제.
int solution(string A, string B) {
int answer = -1;// min(l, r)
int lMove = 100, rMove = 100;
int size = A.size();
if (A == B)
return 0;
for (int i = 1; i < size; ++i)//칸 이동
{
string tmp = ""; //오른쪽 실수로 좌우 반전 됨.
int j = i;
string tmp2 = ""; //왼쪽
int k = size - i;
int loop = 0;
while(loop++ < size)
{
tmp += A[j++ % size];
tmp2 += A[k++ % size];
}
if (tmp == B)
rMove = i;
if (tmp2 == B)
{
lMove = i;
break;
}
}
if(lMove != 100 || rMove != 100)
answer = min(rMove, lMove);
return answer;
}
한 문제를 통과 못한다.
- 디버깅
왼쪽(실수로 좌우 반전) 이동 성공 후에도 오른 쪽이 통과 될때까지 break 되지않고 추가가 되는건 아닐까 싶어 테스트 해본다.
왼쪽으로 한 칸 이동하면 맞출 수 있는 solution("hello", "elloh"); 를 넣어보았다.
-> 오른 쪽이 새로 덮어지기 전에 반복문이 종료되어 min값을 제대로 넣는다 -> 1.
그러나, 비효율이 있기에 왼쪽 찾으면 바로 break 하도록 수정.
이건 나도 해봤지만, 왼쪽 1칸이 맞지 않나?
쓰벌 오른 쪽만 하는 거였음.
적은칸 얘기는 왜 나온겨.
아, 이런 문제 겪었었는데 잊고있었어.
기억하자. 문자열 미는 건, 두개 이어 붙히면 돼.
int solution(string A, string B)
{
B += B;
return B.find(A);
}
'학습(0) > C++ 문제풀이' 카테고리의 다른 글
연속된 수의 합, 등차 수열 응용 (0) | 2025.03.19 |
---|---|
다음에 올 숫자, 등차/ 등비 수열 (0) | 2025.03.18 |
유한소수 판별 (0) | 2025.03.18 |
옹알이1 (0) | 2025.03.18 |
등수 매기 (0) | 2025.03.18 |