본문 바로가기
알고리즘/BOJ(백준)

[ 프로그래머스 / BF / 그리디 ] 조이스틱 풀이

by 뎁꼼 2020. 6. 25.

1. 문제


 

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

 

2. 소스코드


- 2020/06/25 - [알고리즘/PS] - [ 백준-3663번 / BF / 그리디 ] 고득점 풀이

의 열화 버전. 백준에 비해 테스트 케이스가 매우 매우 매우 허술 하고, N의 크기도 매우 매우 작다.

- 테케가 허술하다 보니 별의별 코드가 AC된다. 믿지 말 것.

- 자세한 풀이는 위 링크를 참조하면 될 것 같다.

 

소스코드

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int solution(string str) {

	int answer = 0;
	int pos = 2e9;
	int size = str.size();
	for (int i = 0; i < size; i++)
		answer += min(str[i] - 'A', 'Z' - str[i] + 1);

	for (int i = 0, j; i < size; i++) {
		for (j = i + 1; j < size && str[j] == 'A'; j++);
		if (str[i] == 'A' && j == size + 1) break;
		int left = i * 2 + size - j;
		int right = i + (size - j) * 2;
		int temp = min(right, left);
		pos = min(temp, pos);
	}
	return answer + pos;
}