본문 바로가기
개인공부/패스트캠퍼스 알고리즘

1-7. JavaScript 문자열 문제풀이

by 뭉지야 2023. 8. 1.
728x90

<숫자의 합>

www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

 

#내가푼코드

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let j = input[1];

let answer = 0;
for(let x of j){
  answer = answer + Number(x);
}
console.log(answer);

#포인트
-문자열에서 각 문자(원소)를 하나씩 확인하여 정수로 변환한다.
-정수로 변환된 각 값을 모두 더하여 정답을 계산할 수 있다.

# 정답예시

//fs모듈을 이용해 파일 전체를 읽어와 문자열로 저장하기
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let n = Number(input[0]);
let j = input[1];

let answer = 0;
//문자열에 포함된 문자를 하나씩 확인하며
for(let x of string){
  //모든 숫자를 더하기
  answer += Number(x);
}
console.log(answer);

<문자열 반복>
www.acmicpc.net/problem/2675

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

#포인트
-한 줄씩 읽어 들이면서, 문자열 S에 포함된 문자를 각각 R번 반복한다.
-예시) 4XYZ -> XXXXYYYYZZZZ

#정답예시

//fs모듈을 이용해 파일 전체를 읽어와 문자열로 저장하기
let fs= require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let testCase = Number(input[0]);

//한 줄(line)씩 입력받기
for(let i=1; i<= testCase; i++){
  let [r, s] = input[i].split(" ");
  let result = "";
//현재 문자열의 각 문자를 하나씩 확인하며
for(let j=0; j<= s.length; j++){
  //r번 반복한 문자열을 뒤에 이어붙이기
  result += s.charAt(j).repeat(r);
}
console.log(result);
}

<상수>

www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

 

#내가 푼 코드

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let a = Number(input[0]);
let b = Number(input[1]);

#포인트
-세 자리 수를 문자열 형태로 처리하여, 뒤집을 수 있다.
-예시) "285"가 입력으로 들어오면 "582"로 변경한 뒤에 정수 데이터로 변경한다.


#정답예시

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

//input은 현재 string이다.
//split은 string을 일정한 구분자로 잘라서 배열로 저장한다.

let a = input[0].split(' ')[0];
let b = input[0].split(' ')[1];

let newA = a[2] + a[1] + a[0];   //string이니까 가능하다
let newB = b[2] + b[1] + b[0];

console.log(Math.max(Number(newA), Number(newB))) ;

 

https://moongji-record.tistory.com/549

 

String.prototype.split()

문자열을 일정한 구분자로 잘라서 배열로 저장 console.log("myname is abc".split(" ")) // ['myname', 'is', 'abc']

moongji-record.tistory.com

참고하기

 


<단어의 개수>

www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

 

 

#포인트
-단순히 전체 문자열에 포함된 단어의 개수를 계산한다.
-결과적으로 공백("")으로 구분된 단어의 개수를 세면 된다.

 

#정답코드예시

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

//trim() 메서드는 문자열 양 끝의 공백을 제거한다.
//공백으로 구분된 단어의 개수 출력한다.
let data = input[0].trim().split(" ");
let count = 0;

for(let i=0; i < data.length; i++){
    if(data[i] !== ""){
        count ++;
    }
}
console.log(count);

사이드의 필요없는 공백을 먼저 없앤후에 그걸 split하면 hello world이면 "hello", "world" 이렇게 되겟지 

728x90