Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준 c++ 2468번
- 2870번 c++
- 백준 1103번 c++
- 수학숙제
- 코테
- 백준 c++ 2870번
- 2870번 수학숙제
- c++
- Lv.3
- 17070번
- 프로그래머스
- 오브젝트 풀링
- 백준 1103번 게임
- 백준 17070번 c++
- 2468 c++
- 백준 2870번
- 플레이어 이동
- Lv2
- 유니티
- Unity
- 백준
- 코딩테스트
- 백준 17070번
- 2870번 수학숙제 c++
- Beakjoon
- C#
- dfs
- 백준 1103번
- Algorithm
- 2870번
Archives
- Today
- Total
주녘공부일지
[프로그래머스 C#] Lv.2 조이스틱 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42860
1. 정답코드 및 핵심 아이디어, 유의사항
조이스틱으로 알파벳 이름을 완성할 때 최소 조이스틱 이동 횟수를 구하는 문제
- 초기 알파벳은 모두 A로 시작하여 주어진 이름을 완성하기 위한 최소 조이스틱 이동 횟수
- 양쪽 끝은 이어져있음 ( 0번에서 좌측이동 시, 오른쪽 끝으로 )
좌우 이동 최소 횟수와 위아래 이동 최소 횟수를 나누어 연산
- 좌우 이동과 위아래 이동은 서로 영향을 미치지 않기 때문에 따로 연산
위아래 이동 최소 횟수 구하기
- 위로 이동하는 경우와 아래로 이동하는 경우를 비교해 작은 값으로 세팅
좌우 이동 최소 횟수 구하기
좌우 이동하여 'A'가 아닌 모든 문자에 접근하는데, 최소 이동 횟수를 구하기 위해서는 이동 방향을 두번 이상 바꿀 필요가 없음 ( 두번 이상 바꾸지 않아야 함 )
- 방향을 바꾸지 않고 한 방향으로 가는 경우
- 오른쪽으로 가다가 왼쪽으로 가는 경우
- 왼쪽으로 가다가 오른쪽으로 가는 경우
핵심 아이디어 ( 좌우 이동 최소 횟수 )
A로만 이루어진 부분문자열들의 시작점과 끝점을 기준으로 좌우의 방문해야 하는 영역을 나누어 연산
- 만약 진행 방향을 변경하 경우 이미 지나온 길을 돌아가야 함 ( x 2 )
+ 좌우 이동은 경우의 수에 따른 이동 횟수를 모두 확인해 최소 이동 횟수를 구함
주석 참조
using System;
public class Solution
{
public int solution(string name)
{
int answer = 0;
// 1. 좌우 이동 최소 횟수 구하기
answer = name.Length - 1; // 한 방향으로 가는 경우
// 0번 인덱스는 좌우 이동이 필요하지 않으므로 1부터 순회
for (int i = 1; i < name.Length; i++)
{
// A를 발견하면 A로된 부분문자열을 기준으로 좌우 영역을 나누어 계산
if (name[i] == 'A')
{
int left = i - 1; // 왼쪽 영역 개수
while (i < name.Length && name[i] == 'A')
i++;
int right = name.Length - i; // 오른쪽 영역 개수
answer = Math.Min(answer, 2 * right + left); // 오른쪽 -> 왼쪽
answer = Math.Min(answer, 2 * left + right); // 왼쪽 -> 오른쪽
}
}
// 2. 위아래 이동 최소 횟수 구하기
for (int i = 0; i < name.Length; i++)
{
if (name[i] == 'A')
continue;
int upCount = name[i] - 'A';
int downCount = 'Z' - name[i] + 1;
answer += Math.Min(upCount, downCount);
}
return answer;
}
}
'CodingTest > Programmers Lv.2' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 혼자 놀기의 달인 (0) | 2024.03.20 |
---|---|
[프로그래머스 C#] Lv.2 교점에 별 만들기 (1) | 2024.03.18 |
[프로그래머스 C#] Lv.2 당구 연습 (0) | 2024.02.26 |
[프로그래머스 C#] Lv.2 이모티콘 할인행사 (0) | 2024.02.16 |
[프로그래머스 C#] Lv.2 모음사전 (1) | 2024.02.09 |