[프로그래머스] 키패드 누르기

2024. 9. 9. 02:41

 

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 67256 키패드 누르기

 

 

거리를 모두 배열에 때려 박아서 해결

#include <stdio.h>
#include <stdlib.h>

char* solution(int numbers[],int length,char* hand){
	
	int two[]={3,1,0,1,2,1,2,3,2,3,4,99,4}; //키패드 2와 나머지 키패드의 떨어진 거리  
											// ex)2와 0의 거리=3, 2와 1의 거리=1, 2와 9의거리=3  
											//인덱스 10번 12번은 별과 샾 11은 의미없는수  
											
	int five[]={2,2,1,2,1,0,1,2,1,2,3,99,3}; 	//키패드 5와 나머지 키패드의 떨어진 거리 
	int eight[]={1,3,2,3,2,1,2,1,0,1,2,99,2};  	// 8
	int zero[]={0,4,3,4,3,2,3,2,1,2,1,99,1}; 	// 0
	
	char* answer=(char*)malloc(length+1);
	
	int i=0;
	
	int left= 10; //왼손 별 시작 
	int right= 12; //오른손 샾 시작 
		
	for(i=0; i<length; i++){
		
		switch(numbers[i]){
			case 1://왼 손 
			case 4:
			case 7:
				answer[i]='L';
				left=numbers[i];
				break;
			case 3://오른손  
			case 6:
			case 9:
				answer[i]='R';
				right=numbers[i];
				break;
			//2, 5, 8, 0 에 대해서는 따로처리  
			case 2: 
				if(two[left] < two[right]){		//왼손이 오른손보다 가깝다면 L 
					answer[i]='L';
					left=numbers[i];
				}
				else if(two[left] >two[right]){	//멀다면 R 
					answer[i]='R';
					right=numbers[i];
				}
				else{ 							//같다면 hand를 읽고 그에맞는것 
					if(*hand=='r'){
						answer[i]='R';
						right=numbers[i];
					}
					else{
						answer[i]='L';
						left=numbers[i];
					}
				}
				break;
			case 5:
				
				if(five[left] < five[right]){
					answer[i]='L';
					left=numbers[i];
				}
				else if(five[left] >five[right]){
					answer[i]='R';
					right=numbers[i];
				}
				else{
					if(*hand=='r'){
						answer[i]='R';
						right=numbers[i];
					}
					else{
						answer[i]='L';
						left=numbers[i];
					}
				}
				break;
			case 8:
				
				if(eight[left] < eight[right]){
					answer[i]='L';
					left=numbers[i];
				}
				else if(eight[left] >eight[right]){
					answer[i]='R';
					right=numbers[i];
				}
				else{
					if(*hand=='r'){
						answer[i]='R';
						right=numbers[i];
					}
					else{
						answer[i]='L';
						left=numbers[i];
					}
				}
				break;
			case 0:
				
				if(zero[left] < zero[right]){
					answer[i]='L';
					left=numbers[i];
				}
				else if(zero[left] >zero[right]){
					answer[i]='R';
					right=numbers[i];
				}
				else{
					if(*hand=='r'){
						answer[i]='R';
						right=numbers[i];
					}
					else{
						answer[i]='L';
						left=numbers[i];
					}
				}
				break;
				
		}
		//printf("Hand:%c\n",answer[i]);
		//printf("number[%d]:%d\n",i,numbers[i]);
		//printf("left:%d right:%d\n\n",left,right);
	}
	answer[i]='\0';
	return answer;
	
}

int main(){
	int a[]={1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5};
	int aa[]={7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2};
	int aaa[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
	char* b=malloc(100);
	
	b=solution(a,11,"right");
	printf("%s\n",b);
	
	b=solution(aa,11,"left");
	printf("%s\n",b);
	
	b=solution(aaa,10,"right");
	printf("%s\n",b);
}

 

 

 

'코딩 연습 일지' 카테고리의 다른 글

[Dreamhack] cookie 풀이  (0) 2024.11.26
[프로그래머스] 수박수박수박수박수박수?  (0) 2024.09.09
[프로그래머스] 2016년  (0) 2024.09.09

BELATED ARTICLES

more