LoginSignup
1
0

More than 5 years have passed since last update.

Google Tech Dev Guideの問題を解いてみた

Last updated at Posted at 2019-01-23

はじめに

研修でGoogle Tech Dev Guideの問題を解いていたので、
自分なりに考えたことをメモとして残します。
今回解いた問題

問題

問題文を抜粋すると

Given a string, return the sum of the numbers appearing in the string, ignoring all other characters. A number is a series of 1 or more digit chars in a row. (Note: Character.isDigit(char) tests if a char is one of the chars '0', '1', .. '9'. Integer.parseInt(string) converts a string to an int.)

とのこと。
要約すると、「受け取った文字列から数値のみを取り出しを加算する」といった内容です。
文章のみだと分かりづらいと思うのですが、
下記のような出力になればいいみたいです(sumNumbersメソッドを実装する)

sumNumbers("abc123xyz") → 123
sumNumbers("aa11b33") → 44
sumNumbers("7 11") → 18

↑を見ていただくと分かるかと思うのですが、
数値の間に文字列または空白があった場合は、それぞれの数値を加算する必要があります。

さっそく解いてみた

まずは、文字列中に含まれるかもしれない要素を洗い出しました。

  • 文字列
  • 数値
  • 空白

上記を踏まえ、今回は下記のようなアプローチをとりました。
 1.数値以外の要素を全て空白に変換
 2.空白区切りで配列に格納
 3.配列の中で空の要素以外を全て加算

最終的に下記のようなコードになりました。

sample.java
class Test1{
  public static void main(String args[]){
    // 動作確認用
    System.out.println(sumNumbers("abc123xyz"));
    System.out.println(sumNumbers("aa11b33"));
    System.out.println(sumNumbers("7 11"));
  }
  public static int sumNumbers(String str) {
    // 1.数字以外をすべて半角スペースに変換
    String buf = str.replaceAll("[^0-9]", " ");
    // 2.空白区切りで配列に格納
    String list[] = buf.split(" ");
    int sum = 0;

    // 3.配列の中で空の要素以外を全て加算
    for(int i = 0; i < list.length; i++){
      if (!(list[i].isEmpty())){
        sum = sum + Integer.parseInt(list[i]);
      }
    }
    return sum;
  }
}

「もっとこうした方がいい!」等ありましたら、ぜひご指摘をいただければと思います!

おまけ

普段はRubyで書いているので、Rubyでも解いてみました。

sample.rb
def sumNumbers(str)
  str.gsub(/[^0-9]/," ")
     .split(" ")
     .compact
     .reject(&:empty?)
     .sum{|v| v.to_i}
end
#動作確認用
puts sumNumbers("abc123xyz")
puts sumNumbers("aa11b33")
puts sumNumbers("7 11")

rubyだとメソッドチェーンを使って書けるので楽しいですよね!

1
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
1
0