-
[코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2)코딩테스트/프로그래머스 2022. 12. 10. 00:50728x90
안녕하세요~ 오늘 풀어본 문제는 삼각 달팽이 입니다.
저번에는 네모모양으로 비슷한 문제를 풀어본거같은데
이번에는 나름 비교적 쉽게 풀었습니다.
Level2지만 그래도 어제 안풀리고 오늘은 풀려서 기분이 좋네요~
바로 문제 만나보시겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/68645
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
다음은 제가 작성한 코드입니다.
class Solution { public int[] solution(int n) { int[] answer = new int[(n*(n+1))/2]; int[][] square=new int[n][n]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) square[i][j]=0; } int x=-1; int y=0; // 탐색위치를 정하는 수 int loop=0; // 지정할 번호를 정하는 수 int number=1; for(int i=n;i>0;i--) { loop++; //loop%3==1이면 아래로 if(loop%3==1) { x++; for(int j=0;j<i;j++) { // 밑으로내려가니깐 x값 증가 square[x][y]=number; number++; x++; } x--; } //loop%3==2이면 오른쪽 else if(loop%3==2) { y++; for(int j=0;j<i;j++) { square[x][y]=number; number++; y++; } y--; } //loop%3==0이면 위 else if(loop%3==0) { y--; x--; for(int j=0;j<i;j++) { square[x][y]=number; number++; y--; x--; } y++; x++; } } int pos=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(square[i][j]>0) { answer[pos]=square[i][j]; pos++; } } } return answer; } }
첫 번째 줄부터 하나씩 읽어나가 보겠습니다.
① 먼저 answer의 사이즈를 저장하는 부분입니다. 이건 n~1까지의 합 n*(n+1)/2라는 공식을 이용해서 정했습니다.
② 다음은 위치를 지정해 숫자를 넣어줄 array를 만들겠습니다. n*n의 배열공간을 만들어 0으로 초기화 하겠습니다.
③ 다음은 이제 반복문입니다.
- n이 4인경우를 예시로 설명하겠습니다.
어떠신가요 그림을 보면 이해가 되실까요?
제가 생각한 규칙입니다.
1) n만큼 반복한다.
2) loop의 규칙
- loop의 나머지가 0이면 x값만 증가하는 부분(loop 0, 3)
- loop의 나머지가 1이면 y값만 증가하는 부분(loop 1)
- loop의 나머지가 2이면 x값 y값 각 1씩 감소하는 부분(loop 2)
3) number같은 경우는 신경쓸필요없이 시작값 1을 설정후 계속 +1씩 설정해 주면 됩니다.
4) 한 가지 주의할 점은 두 번째 반복문에서 x++, y++ x-- y-- 으로 인해 값이 1씩 적거나 커지기에 정리하는 과정이 필요합니다.
오늘 알아볼 문제의 설명은 여기서 마무리하겠습니다.
감사합니다:D
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 불량 사용자(Java, Level3) (1) 2022.12.12 [코딩테스트] 프로그래머스 - 헤비 유저가 소유한 장소(MySQL, Level3) (0) 2022.12.10 [코딩테스트] 프로그래머스 - 우유와 요거트가 담긴 장바구니(MySQL, Level4) (0) 2022.12.09 [코딩테스트] 프로그래머스 - 큰 수 만들기(Java, Level2, 실패코드) (0) 2022.12.09 [코딩테스트] 프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기(MySQL, Level4) (0) 2022.12.07