1. 문제 설명
2. 나의 풀이
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = new int[numbers.length];
for(int i = 0; i < numbers.length; i++)
{
if(direction.equals("right"))
{
if(i != numbers.length -1)
{
answer[i+1] = numbers[i];
}
else
{
answer[0] = numbers[i];
}
}
else
{
if(i != 0)
{
answer[i-1] = numbers[i];
}
else
{
answer[numbers.length -1] = numbers[0];
}
}
}
return answer;
}
}
오른쪽 회전은 i+1 이 numbers.length이면 배열 크기 오류 발생하므로,
그 경우만 예외로 두고 answer[i+1]에 numbers[i]를 넣었다.
처음에 헷갈려서 answer[i]에 numbers[i+1]를 넣는 바보짓도 함..ㅎ
반대로 왼쪽은 i-1을 해줘야하는데, 그럼 0-1 일때 오류가 나니까 그 경우만 따로 처리해 주었다.
어찌저찌 돌아가긴 하는데 가독성 안좋은 코드 완성
3. 다른 사람의 풀이
class Solution {
public int[] solution(int[] numbers, String direction) {
int[] answer = new int[numbers.length];
if (direction.equals("right")) {
answer[0] = numbers[numbers.length -1];
for (int i = 0; i < numbers.length - 1; i++) {
answer[i + 1] = numbers[i];
}
} else {
answer[answer.length - 1] = numbers[0];
for (int i = 1; i < numbers.length; i++) {
answer[i - 1] = numbers[i];
}
}
return answer;
}
}
이게 훨씬 보기좋고 깔끔하다.
for문 안에서 방향처리 하는게 아니라, 방향으로 먼저 if문 처리를 해준다.
각각 0번지와 마지막 번지만 예외처리해주고,
right는 0부터 numlength -1 (마지막번지 미리 처리해놨으니 마지막 i까지 갈 필요 x , i+1 = numlength면 범위초과) 까지 반복
left는 1부터 numlength (0번지 미리 처리해놨으니 시작은 1 , i-1 = 0이면 범위초과) 까지 반복
'코테 > java' 카테고리의 다른 글
[프로그래머스][java] lv 0 진료순서 정하기 (0) | 2024.11.21 |
---|---|
[프로그래머스][java] lv 0 가장 큰 수 찾기 (1) | 2024.11.20 |
[프로그래머스][java] lv 0 대문자와 소문자 (0) | 2024.11.20 |
[프로그래머스][java] lv 2 올바른 괄호 (1) | 2024.11.20 |
[프로그래머스][java] lv 2 혼자 놀기의 달인 (0) | 2024.11.19 |