티스토리 뷰
반응형
A로 초기화 되어 있는 알파벳 배열을 조이스틱을 움직여서 최종 결과로 바꿔야 하는데
이 때 가장 최소로 움직이는 횟수를 구하는 문제
문제의 조건
1. 영어 대문자로만 이루어진 string 배열 name이 주어진다.
2. 우리가 바꿔야 하는 배열은 전부 'A'로 초기화 되어 있는데
조이스틱을 상하좌우로 움직여서 name과 똑같이 바꿔야 한다.
3.
위 규칙에 따라 조이스틱을 움직여서 글자를 바꿔야 한다.
이 때 최소 이동 횟수를 구하기
문제의 함정이...
0번째 인덱스부터 순서대로 이동하는 것이 아니라 현재 커서 위치에서 'A'가 아니면서 가장 가까운 위치로 이동해야 합니다.
첨에 이걸 몰라서 4,7,8번이 계속 틀림 ㅠ.ㅠ
시간을 얼마나 버렸는지
결국 구글링 해서 풀었습니다...
아래는 참고한 답안
#include <string>
#include <vector>
using namespace std;
int solution(string name) {
int answer = 0;
int cursor = 0;
//결과물과 비교할 string을 만든 후 A로 초기화
string name_copy(name.length(), 'A');
//결과물과 임시 배열이 같아질 때까지 반복
while (name != name_copy)
{
//조이스틱을 상하로 움직였을 때 더 가까운 거리 저장
answer += min(abs(name[cursor] - 'A'), abs('Z' - name[cursor] + 1));
//커서 위치에 맞춰 임시 배열 인덱스의 알파벳도 바꿔줌
name_copy[cursor] = name[cursor];
//오른쪽과 왼쪽 중 더 가까운 곳으로 이동해야 함 -> 어느 방향으로 갈 지 정하기
//다른 알파벳을 먼저 만나는 곳에서 스톱
for (int i = 1; name.length() > i; i++)
{
//현재 커서값과 i를 더한 값을 name 길이로 나눈 나머지값은 오른쪽으로 이동하는 것이 됨
if (name[(cursor+i) % name.length()] != name_copy[(cursor+i) % name.length()])
{
//커서 위치 갱신하고 이동한만큼 결과값에 더해주기
cursor = (cursor+i) % name.length();
answer += i;
break;
}
//현재 커서값에 name 길이를 더하면 name 인덱스와 같아지거나 넘어간다.
//여기서 i만큼 빼 주면 뒤에서부터 앞(왼쪽)으로 가면서 탐색할 수 있다.
else if (name[(cursor+name.length()-i) % name.length()] != name_copy[(cursor+name.length()-i) % name.length()])
{
cursor = (cursor+name.length()-i) % name.length();
answer += i;
break;
}
}
}
return answer;
}
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[C++] 프로그래머스 더 맵게 풀이 (0) | 2021.10.11 |
---|---|
[C++] 프로그래머스 기능개발 풀이 (0) | 2021.10.11 |
[C++] 프로그래머스 카카오프렌즈 컬러링북 풀이 (BFS) (0) | 2021.10.09 |
[C++] 프로그래머스 124 나라의 숫자 풀이 (0) | 2021.10.08 |
[C++] 프로그래머스 비밀지도 풀이 (0) | 2021.10.06 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DFS
- 백준
- 하드웨어
- 캐나다
- 프로그래머스
- 기초
- 너비우선탐색
- 컴퓨터공부
- BFS
- 아이패드
- c++
- 문제풀이
- 코딩공부
- 영어공부
- 스위프트플레이그라운드
- greedy
- c언어
- 알고리즘
- 컴퓨터
- 그리디
- 캐나다생활
- C언어기초
- dp
- 컴퓨터사이언스
- 깊이우선탐색
- hackerrank
- 다이나믹프로그래밍
- 애플
- 프로그래밍
- 해커랭크
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함