https://www.hackerrank.com/contests/w35/challenges/lucky-purchase
N個の名前と値段が付いた商品がある。
この中で以下の条件を満たす商品名を答えよ。
- 値段を文字列として見た時に、4と7の個数が同じ
- 値段を文字列として見た時に、4と7だけで構成されている
- 上の条件を満たす中で、値段を数値として見た時に最小の商品名を答える
- もし、条件を満たす商品が1つも無ければ"-1"出力
解法
条件を満たすようにチェックして、満たすなら最小かどうか判定して更新していくだけ。
文字列として見るが、実際にto_stringとして文字列にしても良いし、10で割りながらカウントしていってもいい。
#define INF INT_MAX/2 int N; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N; string ans = "-1"; int mi = INF; rep(i, 0, N) { string S; int x; cin >> S >> x; int ok = 1; int c4 = 0, c7 = 0; int y = x; while (0 < y) { int z = (y % 10); y /= 10; if (z == 4) c4++; else if (z == 7) c7++; else ok = 0; } if (ok and c4 == c7) if (x < mi) { ans = S; mi = x; } } cout << ans << endl; }