1. 문제

총 N번의 게임을 하여 A가 이기면 A를 출력하고, B가 이기면 B를 출력합니다.

비길 경우에는 D를 출력합니다. 두 사람의 각 회의 가위, 바위, 보 정보가 주어지면

각 회를 누가 이겼는지 출력하는 프로그램을 작성하세요.

 

가위, 바위, 보의 정보는 1:가위, 2:바위, 3:보로 정하겠습니다.

회수 1 2 3 4 5
A정보 2 3 4 1 3
B정보 1 1 2 2 3
승자 A B A B D

 

입력예제 | 

A 2 3 3 1 3

B 1 1 2 2 3

출력예제 | ABABD

 

 

 

2. 문제풀이

for문으로 A와 B의 배열을 하나씩 돌면서,

조건문으로 A가 이기는 상황을 만들고 A를 answer에 넣어주고, 그 외 상황은 B가 answer에 들어가도록 한다. 

function solution(A, B){
	let answet = "";
    for(let i=0; i<A.length; i++){
		if(A[i] === B[i]) answer = "D";
        // 여기서 부터 A가 이기는 상황 기준으로 써주기
        else if (A[i] === 1 && B[i] === 3) answer += "A";
        else if (A[i] === 2 && B[i] === 1) answer += "A";
        else if (A[i] === 3 && B[i] === 2) answer += "A";
        else answer += "B";
     }
     return answer;
}



let A = [2, 3, 3, 1, 3];
let B = [1, 1, 2, 2, 3];
console.log(solution(A, B));

분류를 해야할 때는 기준을 잘 잡아야한다. 여기서는 A가 이기는 것에 기준을 두고 그 외에는 모두 B가 출력되도록 했다.

 

 

3. 사용개념

논리 연산자 && 사용해서 양쪽 모두 참이어야 true가 반환된다. 하나라도 거짓이면 else if / else로 넘어간다.

1. 문제

선생님이 N(1<=N<=1000)명의 학생을 일렬로 세웠습니다. 일렬로 서 있는 학생의 키가 앞에서부터 순서대로 주어질 때, 맨 앞에 서 있는 선생님이 볼 수 있는 학생의 수를 구하는 프로그램을 작성하세요. (앞에 서 있는 사람들보다 크면 보이고, 작거나 같으면 보이지 않습니다.)

 

입력예제 | 130 135 148 140 145 150 150 153

출력예제 | 5

 

2. 문제풀이

배열을 돌면서(for문) 조건에 충족하면(if문) answer에 누적해서 리턴한다.

max 바꾸면서 비교하는건 최대값 구하는 거랑 같다.

function solution(arr){
    let answer = 1;
    // 첫번째 사람은 무조건 보이니까 카운팅 1부터
    let max = arr[0]; // max는 첫번째 사람의 키로 초기화
    for(let i=1; i < arr.length; i++){
        if(arr[i] > max) {
            max = arr[i];
            answer++;
    } 
    return answer;
    }
}
let arr = [130, 135, 148, 140, 145, 150, 150, 153];
console.log(solution(arr));

처음에 이렇게 작성했는데 제대로 값이 나오지 않았다. 

조건 arr[i]가 max보다 크면 answer++ 카운팅 먼저해주고 max값을 바꿔줘야한다. 

function solution(arr){
    let answer = 1;
    // 첫번째 사람은 무조건 보이니까 카운팅 1부터
    let max = arr[0]; // max는 첫번째 사람의 키로 초기화
    for(let i=1; i < arr.length; i++){
        if(arr[i] > max) {
        	answer++;
            max = arr[i];
    } 
    return answer;
    }
}
let arr = [130, 135, 148, 140, 145, 150, 150, 153];
console.log(solution(arr));

1. 문제

N(1<=N<=100)개의 정수를 입력받아, 자신의 바로 앞 수보다 큰 수만 출력하는 프로그램을 작성하세요.(첫 번째 수는 무조건 출력한다)

 

입력예제 | 7 3 9 5 6 12

출력예제 | 7 9 6 12

 

 

2. 문제풀이

1차원 배열 탐색하는 기본적인 문제

배열을 돌면서(for문) 조건에 충족하는 값들만(if문) answer에 넣어서 리턴한다. 

function solution(arr){
	let answet = [];
    answer.push(arr[0]); // 첫번째 수는 무조건 출력해야하므로 미리 써주고
    for(let i = 1; i < arr.length; i++){
    // 0번은 입력해줬으니까 1번부터 돈다
    	if(arr[i] > arr[i-1]) answer.push(arr[i]);
        // 자신의 바로 앞수보다 커야하니까 자신(i)와 자신바로앞(i-1)을 비교해서 자신(i)가 크면 조건 충족
    }
    return answer;
}

let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(arr));
        
        

1차원 배열 탐색하는 기본적인 문제

 

1. 문제

N개의 문자열이 입력되면 중복된 문자열은 제거하고 출력하는 프로그램을 작성하세요. 출력하는 문자열은 원래의 입력순서를 유지합니다.

입력예제 | 

good

time

good

time

student

출력예제 |

good

time

student

 

 

2. 문제풀이

중복 문자 제거가 String.indexOf()를 사용했다면,

중복 단어 제거는 Array.indexOf()를 사용하는 문제이다.

function solution(str){
	let answer = [];
    for(let i =; i < str.length; i++){
    	if(str.indexOf(str[i] === i) answer += str[i];
    }
    return answer;
}

let str = ["good", "time", "good", "time", "student"];
console.log(solution(str));

처음에는 이렇게만 해서 값은 제대로 나왔지만 배열로 나오지 않았다.

Array.filter() 메소드 사용해서 조건을 만족하는 요소들만 받아서 새로운 배열을 만들어야한다. 

filter() 메소드는 콜백함수를 인자로 받는데, 콜백함수는 인자로 value, index, array 순서대로 받는다.

function solution(str){
	let answer;
    anwser = str.filter((value, i) => { 
    // filter의 콜백함수는 매개변수로 값, 인덱스, 배열 순서대로 받는다. 따로 변수지정을 안해줘도 된다. 
    	if(str.indexOf(value) === i) return value;
        // 값의 첫번째 인덱스 번호가 실제 인덱스 번호와 같은지 확인하고 맞으면 값 리턴한다.
    });
    return answer;
}

let str = ["good", "time", "good", "time", "student"];
console.log(solution(str));

 

 

3. 사용한 개념

String.indexOf()

문자열에서 주어진 값과 일치하는 첫 번째 인덱스를 반환

 

Array.indexOf()

배열에서 주어진 값과 일치하는 첫 번째 인덱스를 반환

 

Array.filter(값, 인덱스, 원래배열)

콜백함수의 조건을 만족하는 요소만 받아서 새로운 배열을 만든다.

배열 내 각 요소에 콜백함수를 호출에서 리턴값이 true인 애들로 새로운 배열 만든다. false이면 버린다. 

// 패턴
let result = students.filter((student) => student.enrolled);
// 화살표 함수로 배열 student중에 등록된 애들만 뽑아서 새로운 배열을 만든다.

1.문제

소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요. 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.

입력예제 | ksekkset

출력예제 | kset

 

 

2. 문제 풀이

중복되는 문자를 찾으려면, for문으로 문자열 탐색한다. 

문자열을 하나씩 돌면서 하나씩 indexOf()로 주어진 값과 일치하는 첫번째 인덱스만 반환해서 anser에 문자 누적해준다. 

function solution(str){
	let answer = "";
    for(let i=0; i<str.length; i++){
    	if(str.indexOf(str[i]) === 1) answer += str[i];
    }
    return answer;
}

console.log(solution("ksekkset"));

"keskket"를 indexOf(str[i]) 메소드 사용하면 주어진 값과 일치한 첫번째 인덱스를 반환하니까

반환된 인덱스

k/0

e/1

s/2

k/0

k/0

e/1

s/2

t/7

원래 인덱스

k/0

e/1

s/2

k/3

k/4

e/5

s/6

t/7

 

 

3. 사용한 개념

String.indexOf(인덱스)

문자열에서 주어진 값과 일치하는 첫 번째 인덱스를 반환

인덱스를 찾는 메소드

 

String.indexOf()를 이용해서 중복되는 문자가 몇개인지  찾을 수 있다. 

function solution(str){
	let answer = 0;
    let position = str.indexOf('k');
    // k의 첫번째 위치를 찾는다
	while(position !== -1){
    	answer++; // 0에 누적해서 카운팅해준다
        position - s.indexOf('k', positon+1);
    }
    return answer;
}

console.log(solution("ksekkset"));

1.문제

소문자로 된 단어(문자열)가 입력되면 그 단어의 가운데 문자를 출력하는 프로그램을 작성하세요. 단 단어의 길이가 짝수일 경우 가운데 2개의 문자를 출력합니다.

입력예제 | study

출력예제 | u

입력예제 | good

출력예제 | oo

 

 

2. 문제풀이

1. 문자열의 가운데를 찾는 변수를 작성한다.

2. 가운데 문자를 출력하는데, 홀수이면 가운데 글자만 짝수이면 가운데 2개의 문자를 출력한다. (조건문이용)

function solution(str) {
	let answer;
    let mid = Math.floor(str.length/2);
    if(str.length % 2 == 1){
    	answer = str.substring(mid, mid+1);
        } else answer = str.substring(mid-1, mid+1);
    return answer;
}

console.log(solution("study"));

 

가운데 숫자를 변수 mid 찾아준다. 문자열의 길이 구해서 2로 나누고 소수점 내림하는 Math.floor()메소드 사용한다.

그리고 문자열의 일부를 출력하는 메소드 substring을 사용하는데, 매개변수로 인덱스(인덱스는 0부터계산)로 받는다. 

if조건문으로 홀수이면 가운데 글자만, 짝수이면 가운데 두글자만 나오도록 인덳 지정하여 반환한다. 

 

 

3. 사용개념

Math.floor()

인수로 전달된 숫자의 소수점 이하를 내림한 정수 반환

 

String.substring(시작인덱스, 마지막인덱스)

기존 문자열의 부분 문자열 반환하는 메소드

1. 문제

N개의 문자열이 입력되면 그 중 가장 긴 문자열을 출력하는 프로그램을 작성하세요.

입력예제 | teacher, time, student, beautiful, good

출력예제 | beautiful

 

 

 

2. 문제풀이

function solution(s){
	let answer;
    let max = Number.MIN_SAFE_INTEGER;
    for(let x of s){
    	if(x.length > max){
        	max = x.length;
            answer = x;
        }
    }
    return answer;
}

let str = ["teacher", "time", "student", "beautiful", "good"];
console.log(solution(str));

가장 큰 값을 찾아야 하니까 max를 정수 중 가장 작은 값으로 설정해서 초기화를 시켜준 다음,

for of 반복문으로 배열을 돌면서 length가 max보다 크면 max에 값을 대입하는 방식으로 푼다. 

 

최대값 찾아야하기 때문에 max도 같이 작성해준다. max는 가장 작은 수로 초기화 한다. 

// x.length가 max보다 크면 max를 그 값으로 바꿔준다. 우항에서 좌항으로 연산됨

1. 문제

대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요.

입력예제 | StuDY

출력예제 | sTUdy

 

 

2. 문제풀이

answer는 빈 문자열로 만들어 놓고, 인수로 받은 문자열을 for of반복문으로 하나씩 돌면서 if-else문으로 대문자이면 소문자로 바꿔서 누적하고, 소문자면 대문자로 바꿔서 누적한 뒤 answer 값을 반환한다. 

function solution(str){
	for(let x of str){
		if(x === x.toUpperCase()){
    		answer += x.toLowerCase();
    	} else answer += x.toUpperCase();
    }
    return answer;
}

console.log(solution("StuDY"));

 

 

3. 사용한 개념

- String.toUpperCase() 

문자열을 대문자로 변환

- String.toLowerCase()

문자열을 소문자로 변환

+ Recent posts