coding test 기초 1 ~ 7
문제
1. 100이하의 자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램을 작성하세요
2. 길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있 으면 “YES"를 출력하고, 만들 수 없으면 ”NO"를 출력한다.
3. 연필 1 다스는 12자루입니다. 학생 1인당 연필을 1자루씩 나누어 준다고 할 때 N명이 학생수 를 입력하면 필요한 연필의 다스 수를 계산하는 프로그램을 작성하세요.
4. 자연수 N이 입력되면 1부터 N까지의 합을 출력하는 프로그램을 작성하세요.
5. 7개의 수가 주어지면 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성하세요.
6. 7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최소값을 찾는 프로그램을 작성하세요.
7.
서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금 지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하 지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한 다.
여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성하세요.
8.
왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
9. 대문자로 이루어진 영어단어가 입력되면 단어에 포함된 ‘A'를 모두 ’#‘으로 바꾸어 출력하는 프로그램을 작성하세요.
10.
한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요.
문자열의 길이는 100을 넘지 않습니다.
나의 풀이 & 해설
1. 100이하의 자연수 A, B, C를 입력받아 세 수 중 가장 작은 값을 출력하는 프로그램을 작성하세요
let answer;
let array = [a, b, c];
for (let i = 0; i < array.length - 1; i++) {
array[i] < array[i + 1]
? (answer = array[i])
: (answer = array[i + 1]);
}
return answer;
function solution(a, b, c){
let answer;
if(a<b) answer=a;
else answer=b;
if(c<answer) answer=c;
return answer;
}
or
스프레드 연산자로 받아와서
Math.min(a,b,c)
2. 길이가 서로 다른 A, B, C 세 개의 막대 길이가 주어지면 이 세 막대로 삼각형을 만들 수 있 으면 “YES"를 출력하고, 만들 수 없으면 ”NO"를 출력한다.
function solution(a, b, c) {
let answer;
if (a + b > c || a + c > b || b + c > a) {
answer = "YES"
} else { answer ="NO" }
return answer;
}
해설
let answer="YES", max;
let tot=a+b+c;
if(a>b) max=a;
else max=b;
if(c>max) max=c;
if(tot-max<=max) answer="NO";
return answer;
}
* 주의
- 세 변의 길이를 줬을 때 길이가 가장 긴 변의 길이는 다른 두 변 길이의 합보다 작아야 삼각형을 그릴 수 있음.
3. 연필 1 다스는 12자루입니다. 학생 1인당 연필을 1자루씩 나누어 준다고 할 때 N명이 학생수 를 입력하면 필요한 연필의 다스 수를 계산하는 프로그램을 작성하세요.
올림(Math.ceil())
- Math.ceil() 함수
- 정수 올림 (음수 포함)
- 자릿수 지정
내림(Math.floor())
- Math.floor() 함수
- 정수 내림 (음수 포함)
- 자릿수 지정
반올림(Math.round())
- Math.round() 함수
- 정수 반올림 (음수 포함)
- 자릿수 지정
- 소수점 숫자 정밀도 문제
* 주의
문제를 잘못 이해했다. 다스 몇 개에 들어가고 나머지로 몇 개가 남을 것. 이렇게 생각했는데, 그 나머지들도 결국 다스에 다 들어가야 해서, 내림이 아닌 올림을 해야했다.
4. 자연수 N이 입력되면 1부터 N까지의 합을 출력하는 프로그램을 작성하세요.
function solution(n){
let answer=0;
for(let i=1; i<=n; i++){
answer=answer+i;
}
return answer;
}
5. 7개의 수가 주어지면 그 숫자 중 가장 작은 수를 출력하는 프로그램을 작성하세요.
Math.min(...arr); 을 활용할 수 도 있지만 아래 로직도 이해하고 넘어가기.
let answer;
let min = Number.MAX_SAFE_INTEGER;
for (i = 0; i < arr.length; i++) {
arr[i] < min ? (min = arr[i]) : (min = min);
}
answer = min;
return answer;
6. 7개의 자연수가 주어질 때, 이들 중 홀수인 자연수들을 모두 골라 그 합을 구하고, 고른 홀수들 중 최소값을 찾는 프로그램을 작성하세요.
function solution(arr){
let answer=[];
let sum=0, min=1000;
for(let x of arr){
if(x%2===1){
sum+=x;
if(x<min) min=x;
}
}
answer.push(sum);
answer.push(min);
return answer;
}
arr=[12, 77, 38, 41, 53, 92, 85];
console.log(solution(arr));
7.
서울시는 6월 1일부터 교통 혼잡을 막기 위해서 자동차 10부제를 시행한다. 자동차 10부제는 자동차 번호의 일의 자리 숫자와 날짜의 일의 자리 숫자가 일치하면 해당 자동차의 운행을 금지하는 것이다. 예를 들어, 자동차 번호의 일의 자리 숫자가 7이면 7일, 17일, 27일에 운행하 지 못한다. 또한, 자동차 번호의 일의 자리 숫자가 0이면 10일, 20일, 30일에 운행하지 못한다.
여러분들은 일일 경찰관이 되어 10부제를 위반하는 자동차의 대수를 세는 봉사활동을 하려고 한다. 날짜의 일의 자리 숫자가 주어지고 7대의 자동차 번호의 끝 두 자리 수가 주어졌을 때 위반하는 자동차의 대수를 출력하는 프로그램을 작성하세요.
function solution(day, arr) {
let answer = 0;
//day 랑 arr의 [I]의 마지막 숫자랑 같으면 ++
for (let i = 0; i < arr.length; i++) {
if (day === arr[i] % 10) {
answer++;
}
}
return answer;
}
arr = [25, 23, 11, 47, 53, 17, 33];
console.log(solution(3, arr));
function solution(day, arr){
let answer=0;
for(let x of arr){
if(x%10==day) answer++;
}
return answer;
}
** arr[i]의 마지막 문자를 받아오려고 했었음. -> 숫자여서 함수가 작동안함. -> 문자로 바꾼 뒤에 마지막 값 추출 가능