개발 이모저모/프로그래머스 알고리즘

[Algorithm] 프로그래머스 레벨[0] 풀이 - (Javascript)(11)

creativeDeveloper! 2023. 4. 15. 14:28
728x90

■ 소인수분해

  • 소인수분해를 하는 가장 간단한 방법은 2부터 n까지의 수 중에서
  • n을 나눌 수 있는 가장 작은 수를 찾는것이다.
  • i = 2부터 반복문을 실행한다.
  • Math.squrt 함수를 사용해서 제곱근을 통해 소인수를 찾는다.
  • n 을 i로 나눴을 때 나머지가 0인 서로 소인수 관계인 숫자를 배열에 넣어주고,
  • n을 i로 나눈 몫을 다시 n에 할당해준다. => 이 과정을 반복해서 i가 n의 소인수가 될때까지 나누어간다.
  • 마지막으로 n 이 1보다 크다면 이 값도 소인수이기때문에 배열에 추가해준다.
  • 이렇게해서 실행을 하면 배열안에 중복되는 숫자가 발생한다.
  •  그래서 filter함수와 indexOf 함수를 통해서 중복되는 숫자를 제외하고 반환해준다.

■ 컨트롤 제트

  • 이 문제의 접근방식은 "Z"를 포함했을때와 포함하지 않았을때로 나누어서 생각해야 한다.
  • 먼저, 주어진 문자열 s는  "Z" , 숫자, 공백으로 구성되어 있다.
  • 그래서 공백을 기준으로 숫자와  "Z" 를 나눈다. => split() 함수사용.
  • 합계 sum은 0으로 초기화한다. 
  • "Z" 가 나오면 이전에 더했던 숫자를 빼주어야하므로 이전값에대한 변수 prev의 값을 null로 초기화한다.
  • 반복문 중 하나인 for of 문을 사용했는데 ,
  • for of  문은 배열, 문자열, Set, Map 등과 같은 iterable(순회 가능한) 객체에서 사용할 수 있다.
  • 만약 "Z" 가 나온다면, 이전에 더했던 숫자들을 뺴주어야한다. => sum -= prev
  •  그리고 이전값 prev는 null로 설정한다.
  • 그 외에 "Z" 가 나오지 않는다면(숫자와 공백으로만 이루어졌을경우) 이전에 더했던 값을 sum에 넣어준다.
  • Number 함수를 사용해서 명시적으로 문자열을 형변환 해주었다.

■ 배열 원소의 길이

 

  • 이 문제의 접근방식은 
  • strlist[0],strlist[1],strlist[2].. strlist[length-1] 의 길이를 구해야한다. => for문 사용
  • 그 후에 각각의 length 배열로 return해주는 문제이다. => push를 사용해서 배열에 넣어준다.
  • 다른 분들의 풀이를 보니 map을 사용해서 한줄로 풀었다... 잊지말자 map!!
  • return strlist.map(x => x.length);

■ 중복된 문자제거

  • 이 문제는 result를 빈문자열로 초기화 한뒤 index값을 비교해서 없으면 추가하는 방법으로 접근해야한다.
  • my_string.length-1만큼 반복문을 돌리고, result에 str의 값이 없으면 추가한다.
  • indexOf() 함수를 사용해서  지정된 요소를 찾을 경우 첫 번째 인덱스를 반환하고,
  • 존재하지 않으면 -1을 반환한다는 점을 이용한다.

728x90