안녕하세요, Js로 코테를 공부하는 주인장입니다.
우선 이 시리즈에 대한 설명은 이 시리즈 첫 번째 글을 참고해주세요!
저의 방학 코테 공부 프로젝트 시리즈 2번째 글을 시작합니다! 계속해서 벨로그 내용을 채워갈 예정이고, 이번 포스팅에서는 프로그래머스의 코딩 기초 트레이닝 124문제를 풀면서 함수를 정리해갈 예정입니다!
function solution(my_string, n) {
var answer = '';
answer=my_string.slice(0,n);
return answer;
}
function solution(my_string, k) {
var answer = '';
answer=my_string.repeat(k);
return answer;
}
function solution(my_string, is_prefix) {
if (my_string.startsWith(is_prefix)) {
return 1;
} else {
return 0;
}
}
class Solution {
public String solution(String myString) {
String answer = "";
answer=myString.toLowerCase();
return answer;
}
}
function solution(numbers, n) {
var answer = 0;
var sum =0;
for(let i =0; i < numbers.length ; i++){
sum+=numbers[i];
if(sum>n){
return sum;
}
}
answer=sum;
return answer;
}
function solution(numbers, n) {
return numbers.reduce((acc, cur) => {
if (acc > n) return acc;
return acc + cur;
});
}
reduce함수와 싸우기- teo_ryu님 벨로그
위의 벨로그 작성 글이 reduce함수를 이해하는데 많은 도움이 되었다.. 다들 위의 벨로그로 reduce 함수를 이해하길!
암튼, 위의 풀이를 위의 벨로그를 통해 고찰해보자.
아래는 reduce()함수의 기본 공식이다.
const numbers = [4, 3, 2, 1];
let sum = numbers.reduce((acc, cur) => {
return acc + cur;
});
acc
에는 numbers의 가장 첫 번째 원소인 4가 할당 되고,
cur
에는 numbers의 나머지 원소인 3,2,1이 순차적으로 들어간다고 한다.
function solution(numbers, n) {
return numbers.reduce((acc, cur) => {
if (acc > n) return acc;
return acc + cur;
});
}
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
console.log(`a = ${Number(input[0])}\nb = ${Number(input[1])}`);
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = input[0];
let arr= [];
for(let i =0; i<str.length;i++){
if(str[i] === str[i].toUpperCase()){
arr.push(str[i].toLowerCase());
}else{
arr.push(str[i].toUpperCase());
}
}
console.log(arr.join(""));
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('close', function () {
console.log('!@#$%^&*(\\\'"<>?:;');
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
let sum = Number(input[0])+Number(input[1]);
console.log(String(Number(input[0])+ " + " + Number(input[1]) + " = " + sum));
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = String(input[0]);
let answer = str.split("");
for(let i =0; i < answer.length; i++){
console.log(answer[i] );
}
});
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = line.split(' ');
}).on('close', function () {
n = Number(input[0]);
if(n%2==0){
console.log(n + " is even");
}
else {
console.log(n + " is odd");
}
});
function solution(my_string, overwrite_string, s) {
var answer = [...my_string];
answer.splice(s, overwrite_string.length, overwrite_string);
return answer.join('');
}
function solution(str1, str2) {
var answer = '';
for( let i =0 ; i<str1.length;i++){
answer+= str1[i]+str2[i];
}
return answer;
}
function solution(str1, str2) {
return [...str1].map((x, idx)=> x+str2[idx]).join("");
}
function solution(arr) {
var answer = '';
answer=arr.join('');
return answer;
}
문제: 연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 b ⊕ a 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요. 단, a ⊕ b와 b ⊕ a가 같다면 a ⊕ b를 return 합니다.
풀이 1 : 그냥 a,b를 String으로 변환하고 나서 더하고, 이걸 다시 Number로 형변환 했는데 47% 만 맞음 ^^.... 틀린 이유는 테케만 보고 아 걍 더하면 되네 이 생각해가지고 조건을 생각안해줌 진짜 바보니ㅜ 왜 틀렸지? 이러고 있었네
function solution(a, b) {
var answer = 0;
answer= Number(String(a)+String(b));
return answer;
}
function solution(a, b) {
var answer = 0;
let answer1= Number(String(a)+String(b));
let answer2= Number(String(b)+String(a));
if(answer1>=answer2){
answer=answer1;
}
else{
answer=answer2;
}
return answer;
}
문제: 연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.
12 ⊕ 3 = 123
3 ⊕ 12 = 312
양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 a b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요. 단, a ⊕ b와 2 a b가 같으면 a ⊕ b를 return 합니다.
코드:위의 문제랑 비슷한 방식으로 풀었음 무난~
function solution(a, b) {
var answer = 0;
let answer1=Number(String(a)+String(b));
let answer2=2*a*b;
if( answer1 >= answer2){
answer=answer1;
}
else{
answer=answer2;
}
return answer;
}
function solution(ineq, eq, n, m) {
var answer = 0;
if(ineq==">"&& eq=="="){
if(n>=m){answer=1;}
else{answer=0;}
}
else if(ineq==">"&& eq=="!"){
if(n>m){answer=1;}
else{answer=0;}
}
else if(ineq=="<" && eq=="="){
if(n<=m){answer=1;}
else{answer=0;}
}
else {
if(n<m){answer=1;}
else{answer=0;}
}
return answer;
}
function solution(ineq, eq, n, m) {
if (eq === '=' && n === m) return 1
if (ineq === '<' && n < m) return 1
if (ineq === '>' && n > m) return 1
return 0
}
function solution(ineq, eq, n, m) {
if (ineq === "<") {
return eq === "=" ? (n <= m ? 1 : 0) : (n < m ? 1 : 0);
}
if (ineq === ">") {
return eq === "=" ? (n >= m ? 1 : 0) : (n > m ? 1 : 0);
}
}
문제:정수가 담긴 리스트 num_list가 주어집니다. num_list의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.
코드 1: filter로 걍 이어붙인 내 코드
function solution(num_list) {
let sol = num_list.filter(el=>(el%2===1));
let sol2 = num_list.filter(el=>(el%2===0));
return Number(sol.join(''))+Number(sol2.join(''));
}
function solution(num_list) {
var even = num_list.filter(n => n % 2 === 0).reduce((acc, cur) => acc+cur, '');
var odd = num_list.filter(n => n % 2 === 1).reduce((acc, cur) => acc+cur, '');
return Number(even) + Number(odd);
}
function solution(my_string, n) {
var answer = '';
answer=my_string.slice(my_string.length-n,my_string.length);
return answer;
}
문제:정수 start와 end가 주어질 때, start부터 end까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
코드: 배열에 하나씩 넣을 때 push()함수 사용하기
function solution(start, end) {
var answer = [];
for(let i=start;i<=end;i++){
answer.push(i);
}
return answer;
}
function solution(arr, k) {
var answer = [];
if(k%2!=0){
for(let i=0;i<arr.length;i++){
answer.push(arr[i]*k);
}
}
else if(k%2==0){
for(let j=0;j<arr.length;j++){
answer.push(arr[j]+k);
}
}
return answer;
}
- 코드: 이 문제의 핵심은 map()함수!
function solution(num_str) {
var answer = [];
answer=num_str.split("").map(Number);
let sum=answer.reduce((a,b)=>(a+b));
return sum;
}
function solution(arr, n) {
var answer = [];
if(arr.length%2!=0){
for(let i=0;i<arr.length;i++){
if(i%2==0){
answer.push(arr[i]+n);
}else{
answer.push(arr[i]);
}
}
}
else{
for(let i=0;i<arr.length;i++){
if(i%2!=0){
answer.push(arr[i]+n);
}else{
answer.push(arr[i]);
}
}
} return answer;
}
function solution(arr, n) {
var answer = [];
if(arr.length%2!=0){
for(let i=0;i<arr.length;i+=2){
answer.push(arr[i]+n);
}
}
else{
for(let i=1;i<arr.length;i+=2){
answer.push(arr[i]+n);
}
} return answer;
}
function solution(num_list) {
var answer = [];
if(num_list[num_list.length-1]>num_list[num_list.length-2]){
let a = num_list[num_list.length-1] - num_list[num_list.length-2];
num_list.push(a);
}
else{
let a = num_list[num_list.length-1]*2;
num_list.push(a);
}
return num_list;
}
function solution(num_list, n) {
var answer = [];
for(let i=0;i<num_list.length;i+=n){
answer.push(num_list[i]);
}
return answer;
}
function solution(num_list) {
var answer = 0;
for(let i=0;i<num_list.length;i++){
let mul= num_list.reduce((a,b)=>(a*b));
let sum =num_list.reduce((a,b)=>(a+b));
if(mul<sum*sum){
answer=1;
}
else{
answer=0;
}
}
return answer;
}
function solution(num_list, n) {
var answer = 0;
for(let i=0;i<num_list.length;i++){
if(num_list[i] == n){
answer=1;
break;
}
else {
answer=0;
}
}
return answer;
}
function solution(num_list) {
var answer = 0;
for(let i=0; i<num_list.length;i++){
if(num_list[i]<0) {
answer=i;
break;
}
else{
answer=-1;
}
}
return answer;
}
function solution(arr) {
var answer = [];
for(let i=0; i<arr.length;i++){
if(arr[i]>=50 && arr[i]%2==0){
answer.push(arr[i]/2);
}
else if(arr[i]<50 && arr[i]%2!=0){
answer.push(arr[i]*2);
}
else{
answer.push(arr[i]);
}
}
return answer;
}
문제:정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
코드 : 문자열을 배열로 변환, 배열의 처음 부터 끝까지 쭉 반복하며 n의 수를 카운트
function solution(n, control) {
let ans=control.split("");
for(let i=0;i<ans.length;i++){
if(ans[i]=="w"){
n+=1;
}
else if(ans[i]=="s"){
n-=1;
}
else if(ans[i]=="d"){
n+=10;
}
else if(ans[i]=="a"){
n-=10;
}
}
return n;
}
문제: 영소문자로 이루어진 문자열 my_string과 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때, my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.
코드: 문자열 -> 배열 -> 해당하는애 바꾸기 -> 문자열
function solution(my_string, alp) {
var answer = '';
let ans = my_string.split("");
for(let i=0;i<ans.length;i++){
if(ans[i]==alp){
ans[i]=ans[i].toUpperCase();
}
}
answer=ans.join('');
return answer;
}