공부/알고리즘&자료구조

항해99 문제19번풀이 (수박수박수박수박수박수?,프로그래머스)

youngble 2021. 11. 10. 00:15

https://programmers.co.kr/learn/courses/30/lessons/12922

 

코딩테스트 연습 - 수박수박수박수박수박수?

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한

programmers.co.kr

 

내가 푼식:

 

접근법

먼저 배열의 속성이 무엇일까 생각했다. 수박 이라는 단어를 각각 하나로 쪼개서 더해야할지, 수박을 한단어로 만들고 마지막뒤를 더하거나 빼는걸 생각하고 접근했다. 처음엔 for문을 통해 수박 이라는 단어를 반복하되 2로 나누고 남은 값이 0이 아니면 홀수이므로 그땐 따로 '수'라는 단어를 합칠려고 생각했지만 그렇게 되면 n 이 때는 '수박' 이라는 단어를 쓰는 짝수 변수가 없으므로 에러가 뜰거 같아 그 방법을 접고 n이 1이 더래도 할수있는 방법을 생각하다 '수박' 이라는 단어에서 slice를 이용하여 홀수일때만 마지막 뒤 한글자를 자르기로했다.

이때 for문을 생략하기위해 repeat 함수를 썼는데, n만큼 반복하게되면 '수박'이라는 단어가 원하는 값보다 2배많이 나오기때문에 2로 나눈값을 repeat하리고 생각하였다. 하지만 홀수 같은경우는 나누고나면 정수가 아닌 소수점을 가진 실수형이기때문에 이때는 반올림해주고 slice 로 잘라버리기로 결정했다.

 

코드 풀이

2줄. 반복할 문자열 '수박'을 담은 변수 a 를 선언 및 초기화

3줄~6줄. 함수의 인자로 들어오는 n 값이 짝수일때만  a를 repeat 하고 그 값을 melon 변수에 담기로함. 이때 n/2는 repeat을 원하는 수만큼 반복하기위해 나눠준것.

 

8줄. 만약 홀수면 a를 똑같이 반복해주는데 이때 홀수는 2로 나누면 소수점이 생기기때문에 반올림을 위해 Math.round 를 썼다. 반올림으로 반복이 한번더 되므로 마지막 뒷문자를 자르기위해 slice 를 사용. 인덱스0부터 시작하여 n만큼만 출력