개발 이모저모/프로그래머스 알고리즘
[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