JavaScript 코딩테스트(6)_문자열 문제

Minji Lee·2023년 5월 16일
0

JS코딩테스트

목록 보기
6/120
post-thumbnail

백준 11720) 숫자의 합

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

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

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

[핵심 아이디어]

  • 공백없이 주어진 문자열을 split()이용하여 분리

[문제 풀이]

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

// 숫자의 개수
let N=Number(input[0]);
let numList;
for(let i=0;i<N;i++){
  numList = input[1].split('').map(Number);
}
console.log(numList.reduce((a,b)=>a+b));

[다른 문제 풀이]

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

// 숫자의 개수
let N=Number(input[0]);
let string = input[1];

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

백준 2675) 문자열 반복

문제

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

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./: 이다.

입력

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.

출력

각 테스트 케이스에 대해 P를 출력한다.

[핵심 아이디어]

  • 한 줄씩 읽어 들이면서, 문자열 S에 포함된 문자를 각각 R번 반복
  • 문자열에서 하나의 문자 추출 문자열.charAt(문자열 인덱스)

[문제 풀이]

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

// 테스트 케이스 개수
let P = Number(input[0]);

// 한 줄(line)씩 입력 받기
for(let i=1;i<=P;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);
}

백준 2908) 상수

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력

첫째 줄에 상수의 대답을 출력한다.

[핵심 아이디어]

  • 세 자리 수 문자열을 뒤집음

[문제 풀이]

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

// 두 수 A,B
let [A,B]= input[0].split(' ');

let reverseA=A[2]+A[1]+A[0];
let reverseB=B[2]+B[1]+B[0];

console.log(Math.max(reverseA, reverseB));

백준 1316) 그룹 단어 체커

문제

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력

첫째 줄에 그룹 단어의 개수를 출력한다.

[핵심 아이디어]

  • 각 알파벳을 하나씩 확인(a~z 총 26개)
  • 각 알파벳에 대해서 연속해서 등장한 횟수가 1번인지 체크
  • 집합 이용

[문제 풀이]

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

let n = Number(input[0]);
let summary=0;

for (let i=1;i<=n; i++){
  let data=input[i];
  if (check(data)) summary+=1;
}

console.log(summary);

// 그룹 단어인지 체크하는 함수
function check(data){
  let setData=new Set(data[0]);
  for (let i=0;i<data.length-1;i++){
    // 오른쪽 단어와 다르다면
    if (data[i] != data[i+1]){
      // 이미 등장한 적 있는 알파벳이라면
      if (setData.has(data[i+1])){
        return false;
      }
      else{
        setData.add(data[i+1]);
      }
    }
  }
  return true;
}

백준 1152) 단어의 개수

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

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

출력

첫째 줄에 단어의 개수를 출력한다.

[핵심 아이디어]

  • 전체 문자열에 포함된 단어의 개수 계산
  • 이때, 공백으로 구분된 단어의 개수를 세면 됨(공백은 제거 trim() 메서드 이용)

[문제 풀이]

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

let string = input[0].trim().split(' ');

if (string == ""){
  console.log(0);
}
else{
  console.log(string.length);
}

0개의 댓글