2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AtCoder Beginner Contest 279 の解答例(Javascript)

Posted at

この記事の目的

競技プログラミングでは少数派のJSerのために正解した問題の解答例を記載しておきます。
より良い解法があればご指摘いただきたいです!

今回のコンテストの内容はこちらから!
https://atcoder.jp/contests/abc279/


A - wwwvvvvvv

問題文

v と w のみからなる文字列 S が与えられます。
S の中に、下に尖っている部分が何箇所あるかを出力してください。

入力

入力は以下の形式で標準入力から与えられる。

S

解答例

var lines = [];
var reader = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});
reader.on('line', function (line) {
    lines.push(line);
});
reader.on('close', function () {
    const S = lines[0];
    const strings = S.split('');
    let num = 0;
    strings.forEach(str => {
        if(str == "v"){
            num = num +1;
        }
        if(str == "w"){
            num = num +2;
        }
    })
    console.log(num);
});

解説

単純なif文の条件分岐でできます

B - LOOKUP

問題文

英小文字からなる文字列 S,T が与えられるので、 T が S の(連続する)部分文字列かどうか判定してください。

なお、文字列 X に以下の操作を 0 回以上施して文字列 Y が得られる時、またその時に限り Y は X の(連続する)部分文字列であると言います。

以下の 2 つの操作から 1 つを選択して、その操作を行う。
X の先頭の 1 文字を削除する。
X の末尾の 1 文字を削除する。
例えば tag は voltage の(連続する)部分文字列ですが、 ace は atcoder の(連続する)部分文字列ではありません。

入力

入力は以下の形式で標準入力から与えられる。

S
T

解答例

var lines = [];
var reader = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});
reader.on('line', function (line) {
    lines.push(line);
});
reader.on('close', function () {
    const S = lines[0];
    const T = lines[1];
    // console.log(S,typeof(S));
    const reg = new RegExp(T);
    const result = S.search(reg);
    console.log(result === -1 ? 'No' : 'Yes');
});

解説

正規表現を使い、目的の文字列が含まれているかを判定した。

C - RANDOM

問題文

と . からなる H 行 W 列の図形 S,T が与えられます。

図形 S は H 個の文字列として与えられ、 Si の j 文字目は S の i 行 j 列にある要素を表します。 T についても同様です。

S の列を並べ替えて T と等しくできるか判定してください。

但し、図形 X の列を並べ替えるとは、以下の操作を言います。

(1,2,…,W) の順列 P=(P1 ,P2 ,…,PW) をひとつ選択する。
その後、全ての 1≤i≤H を満たす整数 i について、以下の操作を同時に行う。
1≤j≤W を満たす全ての整数 j について同時に、 X の i 行 j 列にある要素を i 行 Pj列にある要素に置き換える。

入力

入力は以下の形式で標準入力から与えられる。

H W
S1
S2
⋮
SH
T1
T2
⋮
TH

#解答例

var lines = [];
var reader = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});
reader.on('line', function (line) {
    lines.push(line);
});
reader.on('close', function () {
    const [height, width] = lines.shift().split(' ').map(el=>parseInt(el, 10));
    // console.log(height, width);
    const S = lines.slice(0, height);
    const H = lines.slice(height);
    // console.log(S, 'S');
    // console.log(H, 'H');

    let ans = 'Yes';
    for(let i = 0; i < height; i++){
        let s_count = 0;
        let h_count = 0;
        S[i].split('').forEach(el => {
            if(el === '#'){s_count++}
            return;
        })
        H[i].split('').forEach(el => {
            if(el === '#'){h_count++}
            return;
        })
        // console.log(i, s_count, h_count);
        if(s_count !== h_count){
            ans = 'No';
            break;
        }
    }

    console.log(ans);
});

解説

SグループとTグループの各列の#の数を数え、
全て同じであれば、Yesを返し、それ以外はNoを返す

終わりに

JavaScriptの解答例が少ないので、競技プログラミングにJSerの人がもっと増えることを願っています!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?