반응형
프로그래머스
문제 설명
정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 3 ≤ numbers의 길이 ≤ 20
- direction은 "left"와 "right" 둘 중 하나입니다.
입출력 예
numbers | direction | result |
[1, 2, 3] | "right" | [3, 1, 2] |
[4, 455, 6, 4, -1, 45, 6] | "left" | [455, 6, 4, -1, 45, 6, 4] |
입출력 예 #1
- numbers 가 [1, 2, 3]이고 direction이 "right" 이므로 오른쪽으로 한 칸씩 회전시킨 [3, 1, 2]를 return 합니다.
입출력 예 #2
- numbers 가 [4, 455, 6, 4, -1, 45, 6]이고 direction이 "left" 이므로 왼쪽으로 한 칸씩 회전시킨 [455, 6, 4, -1, 45, 6, 4]를 return 합니다.
소스코드
Solution.c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
// 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요.
int* solution(int numbers[], size_t numbers_len, const char* direction) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
int* answer = (int*)malloc(sizeof(int) * numbers_len);
if (strcmp(direction,"right") == 0)
{
for (int i = 1; i < numbers_len; i++)
{
answer[i] = numbers[i-1];
}
answer[0] = numbers[numbers_len-1];
}
else
{
for (int i = 0; i < numbers_len-1; i++)
{
answer[i] = numbers[i + 1];
}
answer[numbers_len - 1] = numbers[0];
}
return answer;
}
풀이
'strcmp'를 이용하여 direction의 내용이 right와 같을 땐 i가 1부터 시작하여 i-1의 값이 담기도록 해 주었다. 그리고 answer[0]일 때에는 nubers에 들어있는 마지막 값이 들어갈 수 있도록 해주었다.
반대로 right가 아니라면 left라는 의미이기 때문에 else를 이용해주었고, right와 다르게 i는 0부터 시작하여 i+1의 값을 넣어주었다. 그리고 마지막 값에는 nubers의 첫 번째 값을 입력하게 해주었다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr