https://programmers.co.kr/learn/courses/30/lessons/86491
내가푼 방식:
접근법
코드풀이
2줄~4줄.
앞으로 필요한 값들을 넣어줄 변수를 선언,초기화 해줌. 각각 설명하자면 max 는 모든 명함들의 사이즈중 가장 큰 길이를 넣어줄 변수
min배열은 각각의 명함들안에 세로와 가로를 비교하여 그 명함이 가진 최소길이들을 담아줄 배열그릇이다.
max2는 명함들중 가장큰 길이를 제외하고 max가 담긴 명함의 다른 나머지 길이와 다른 명함들안의 각각의 최소길이와 비교하여 그중에 가장 큰 값을 max2에 넣어준다.
5줄.
현재 입력해준 명함들이 가진 사이즈들의 형태가 [[],[],[]] 이런식으로 배열안에 또 배열이 담겨있다.
따라서 큰 틀[] 하나를 제거 하기위해서 먼저 모든 수를 string 으로 바꿔주고, string 이면 하나의 문자열로만 인식하고 각각 값들을 분리하지않기때문에, split 을 이용하여 ',' 을 기준으로 배열로다시 만들면서 index를 나눠주기로했다.
보는거와 같이 [] 하나의 큰 대괄호 안에 각각의 string 타입의 숫자들로 형태를 바뀌었다.
6~8줄.
string 형태의 값들을 다시 number 형태로 바꾸기위해 parsinInt사용하여 각각의 index에 해당하는 값들을 바꿔줌.
10줄.
이제 number 타입의 배열이 되었으므로 그 안에서 가장 큰 사이즈를 갖는 값을 Math.max 를 사용하여 구해주었다 이때 파라미터로 들어가는 sizes는 배열인 형태인데 max 메서드는 (1,2,3) 와 같이 하나하나의 값들을 넣어주어야한다 따라서 그런 형태를 만들어 주기 위해서 ...이라는 나머지 매개변수 를 사용하여 [] 을 제거해주고 각각의 값들만 파라미터로 넣어주었다.
11줄~13줄.
이제 가장 큰 사이즈를 구했다면 그에 해당하는 명함의 나머지 길이와 다른 명함이 들어가는지 비교하기위해 다른 명함들의 길이와 비교해야한다. 이때 j*2와 2*j+1 인 index 를 준것은 각각 명함이 가로 세로 두가지의 인덱스와 값을 갖기 때문에 텀을 주기위해서 였다.
이렇게 각각의 명함들의 최소값을 min배열에 넣어주었다.
15~16줄.
만약 가장 큰 사이즈를 갖은 명함의 값이 짝수라면 그 앞에 +1가 된 홀수가 가장 큰 사이즈와 같이 포함된 명함의 길이 일것이다.
따라서 그 가장큰 값의+1의 숫자 값과, 아까 구한 min에 해당하는 각각 다른 명함들의 최소값과 비교하여, 만약 다른 명함들의 최소값이 가장큰 길이를 가진 명함의 다른 사이즈보다 크다면 명함을 돌려서 넣을때도 들어가기위해서 그 최소값으로 바꿔준다. 그 결과값을 max2에 넣어주었다
19줄.
반대로 가장큰사이즈를 가진 명함의 인덱스가 홀수면 그 명함이 가진 가로세로중 하나는 짝수에 갖고 있기때문에 -1의 index로 min 과 비교해주기로했다. 그 결과값을 max2에 넣어주었다
이제 그 결과값이 각각 최소한의 길이로 모든 명함을 넣을수있는 사이즈이므로 곱하기를 하여 총 면적을 구하여 리턴한다
프로그래머스에서 다른사람들이 한것
'공부 > 알고리즘&자료구조' 카테고리의 다른 글
항해99 문제37번풀이 (소수 만들기 , 프로그래머스) (0) | 2021.11.12 |
---|---|
항해99 문제31번풀이 (같은 숫자는 싫어,프로그래머스) (0) | 2021.11.11 |
항해99 문제28번풀이 (하샤드 수,프로그래머스) (0) | 2021.11.11 |
항해99 문제27번풀이 (콜라츠 추측,프로그래머스) (0) | 2021.11.11 |
항해99 문제33번풀이 (로또의 최고 순위와 최저 순위,프로그래머스) (0) | 2021.11.11 |