같거나 비슷한 코드를 여러 번 실행시켜야 할 경우에 쓰는 구문
반복할 조건을 초기화, 조건식, 증감문 순으로 넣어줌
for(초기화; 조건식; 증감문){
반복할 코드
}
반복한 조건중, 초기화, 증감문은 따로, 조건식만 괄호 안에 넣어줌
let 초기화;
while(조건식){
반복할 코드
증감문
}
Q.
(의사코드를 적는 연습을 해야겠다... )
Q.17
// 수학 시간에 분명히 배운 '소수'
// 소수: 수학에서 1과 그수 자신 외에는 나누어 떨어지지 않는 수, 단 1보다 큰 자연수
// 1. 1보다 커야 한다.
// 2. 2를 제외한 짝수는 소수가 아니에요.
// 3. 3부터 자기 자신(num) 전까지 for문으로 반복해서, 하나라도 나누어 떨어지는 수가 나온다. -> 소수가 아니다.
function isPrime(num) {
// 1이면 소수가 아니다.
if(num === 1) {
return false;
}
if (num === 2) {
return true;
}
// 짝수는 소수가 아니다.
if (num % 2 === 0) {
return false;
}
// 리팩토링 -> 더 좋은 코드로 바꾸는거
// 제곱근 -> 코드가 반복되는 횟수가 줄어든다.
// 제곱근이 존재한다 -> 소수가 아니다.
// num까지 반복할 필요 없이 제곱근까지만 확인해서, 만약에 제곱근이 있으면, false;
// Math.floor -> 소수점 버림
let sqrt = Math.floor(Math.sqrt(num))
for (let i = 3; i <= sqrt; i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
Q.18
// 17번은 그냥 소수인지 아닌지만 판단해서 불린
// num까지의 목록을 가져와라.
function listPrimes(num) {
// 2이상이기 때문에, 문자열 '2'를 담은 변수를 만든 다음, 2에다가 '-?-?-....'
let result = '2';
// 홀수 중에서 소수를 찾아보자.
for (let i = 3; i <= num; i += 2) {
// 소수인지, 아닌지 판단할 수 있는 불린값으로 판단할 수 있는 변수
let isPrime = true;
let sqrt = Math.floor(Math.sqrt(i))
for (let j = 3; j <= sqrt; j+= 2) {
// 이 조건 통과하면 소수
// 못하면 소수 아님
if (i % j === 0) {
isPrime = false;
}
}
if (isPrime === true) {
// isPrime이 true일 경우
// result (현재는 '2') -?-?-?-?
result = `${result}-${i}`
}
}
return result;
}
Q.19
function makePermutations(str) {
// 입력값: 문자열 ex) '123'
// 출력값: 해당 문자열에 등장하는 각 문자(letter)를 가지고 만들 수 있는 길이 2의 문자열 ex) '11,12,13,21,22,23,31,32,33'
// '첫번째 문자 + 첫번째 문자, 첫번째문자 + 두번째문자 ... 마지막 문자 + 마지막 문자'
let result = '';
// 이중반복문을 돌려야 한다.
// 첫번째 반복문이 실행되는 동안 i는 그대로 있고, j는 계속 바뀐다.
for (let i = 0; i < str.length; i++) {
for (let j = 0; j < str.length; j++) {
result = result + `${str[i]}${str[j]},`
}
}
//'11,12,13,21,22,23,31,32,33,' -> '11,12,13,21,22,23,31,32,33'
return result.slice(0, result.length - 1);
}
Q.20
function hasRepeatedCharacter(str) {
// 입력값: 문자열 str
// 출력값: 불린 -> 문자열에 중복된 문자(letter)가 존재하는지 여부를 리턴해야 합니다.
// 이중반복문
// 첫번째 문자랑 -> 두번째문자, 세번째문자... 끝까지 비교
// 두번째 문자랑 -> 세번째문자, 네번째문자 ... 끝까지 비교
for(let i = 0; i < str.length; i++) {
for(let j = i + 1; j < str.length; j++) {
if (str[i] === str[j]) {
return true;
}
}
}
Q.21
function makeMarginalString(str) {
// 입력값 : 문자열 str ex) 'flower'
// 출력값 : 한 글자를 추가할 때마다 부분적으로 완성된 문자열을 전부 이어붙인 문자열 ex) 'fflfloflowfloweflower'
// <결국 이중 반복문 필요>
// 첫번째 반복문 -> 길이만큼 반복 -> 반복횟수를 결정
// 두번째 반복문 -> 몇 개의 문자를 붙일 건지 결정
// 0: ''
// 1: '' + 'f'
// 2: '' + 'f' + 'fl'
// 3: '' + 'f' + 'fl' + 'flo'
// 4: '' + 'f' + 'fl' + 'flo' + 'flow'
// 5: '' + 'f' + 'fl' + 'flo' + 'flow' + flowe'
// 6: '' + 'f' + 'fl' + 'flo' + 'flow' + flowe' + 'flower'
let result = '';
for (let i = 0; i < str.length; i++) {
for (let j = 0; j <= i; j++) {
result = result + str[j]
}
}
return result;
}