| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- WSL
- 쿼리
- WPF
- 코테
- 프로그래머스
- 자바
- c#
- delegate
- JPA
- Spring Boot
- 1931번
- Python
- MVVM
- level4
- 일반화
- SQL
- 3일컷
- 백준
- programmers
- MySQL
- 스프링부트
- level2
- Java
- 운전면허
- 씨샵
- 보통2종
- 닫기버튼
- 코딩테스트
- springboot
- level3
- Today
- Total
욱꾸미의 주꾸미 발
[코딩테스트] 프로그래머스 - 삼각 달팽이(Java, Level2) 본문
안녕하세요~ 오늘 풀어본 문제는 삼각 달팽이 입니다.
저번에는 네모모양으로 비슷한 문제를 풀어본거같은데
이번에는 나름 비교적 쉽게 풀었습니다.
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 |