[2019 Kakao冬季実習]Q 02管(JAVA)
11453 ワード
質問する
説明:
数え切れない、順序付けされた、またはある順序で並べられた要素の集合を「tuple」(tuple)と呼ぶ.n個の要素を有するtupleをn tupleと呼び、以下のように表すことができる. (a1, a2, a3, ..., an) Tupleには以下の性質があります.
重複する要素が存在する可能性があります.ex : (2, 3, 1, 2) 要素には固定された順序があり、要素の順序が異なる場合、異なるトーンである.ex : (1, 2, 3) ≠ (1, 3, 2) tupleの要素数は限られている. 要素の個数がnであり、繰り返し要素のtuple {{a1}, {a1, a2}, {a1, a2, a3}, {a1, a2, a3, a4}, ... {a1, a2, a3, a4, ..., an}} 例えば、tupleが(2、1、3、4)である場合 {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}} に表示されます.この場合、集合は要素順序の影響を受けません. {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}} {{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}} {{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, {2}} 同じ例(2、1、3、4)をすべて表します.
パラメータに特定のtupleを表す集合を含む文字列sが与えられた場合、解関数を完了し、sで表されるtupleを配列に戻します.
せいげんじょうけん sの長さは5以上100000以下である. sは、数字と「{」、「}」、「,」のみで構成されています. の数字は0で始まりません. sは、繰り返し要素のないtupleを常に正確に表す. sで表されるtupleの要素は100000より大きい自然数である. 入力は、を返す配列の長さが1または500未満の場合にのみ与えられます. I/O例
sresult"{{2},{2,1},{2,1,3},{2,1,3,4}}"[2, 1, 3, 4]"{{1,2,3},{2,1},{1,2,4,3},{2}}"[2, 1, 3, 4]"{{20,111},{111}}"[111, 20]"{{123}}"[123]"{{4,2,3},{3},{2,3,4,1},{2,3}}"[3, 2, 4, 1]
に答える
説明:文字列をコレクション単位でグループ化し、コレクション内の要素の個数で順番にソートします. 小さい頃からセットを探索し,追加した数字を探索して結果配列に追加した. 新学
文字列の切り分けが漠然としていたので、この機会に
また、集合を1つずつ検索して追加する数字を探す場合は、
コード#コード#
説明:
数え切れない、順序付けされた、またはある順序で並べられた要素の集合を「tuple」(tuple)と呼ぶ.n個の要素を有するtupleをn tupleと呼び、以下のように表すことができる.
重複する要素
(a1, a2, a3, ..., an)
がない場合(ただし、a 1,a 2,...,anは自然数)、集合記号「{」,「}」を用いて表すことができる.パラメータに特定のtupleを表す集合を含む文字列sが与えられた場合、解関数を完了し、sで表されるtupleを配列に戻します.
せいげんじょうけん
sresult"{{2},{2,1},{2,1,3},{2,1,3,4}}"[2, 1, 3, 4]"{{1,2,3},{2,1},{1,2,4,3},{2}}"[2, 1, 3, 4]"{{20,111},{111}}"[111, 20]"{{123}}"[123]"{{4,2,3},{3},{2,3,4,1},{2,3}}"[3, 2, 4, 1]
に答える
説明:
文字列の切り分けが漠然としていたので、この機会に
split()
、trim()
などのメソッド機能を正確に検索し、羽根で整理しました.また、集合を1つずつ検索して追加する数字を探す場合は、
contains()
で照合を行い、add()
で区切られた方法で記述されていた.if (!numbers.contains(element)) {
result[index++] = Integer.parseInt(element);
numbers.add(element);
}
しかし,numbers.add(element)
自体が結リンゴ値として成功するとtrueが返され,この要素がsetに既に存在する場合falseが返されるため,条件文に直接入れる方法もあることが分かった.したがって、より簡潔なコードは以下のようになります.if (numbers.add(element)) result[index++] = Integer.parseInt(element);
setに一度アクセスするだけで済むので、効率が高く、見た目も明確です.コード#コード#
import java.util.*;
class Solution {
public int[] solution(String s) {
String[] parsedChunks = parseChunks(s);
int[] result = new int[parsedChunks.length];
int index = 0;
Set<String> numbers = new HashSet<>();
for (String chunk : parsedChunks)
for (String element : chunk.split(","))
if (numbers.add(element)) result[index++] = Integer.parseInt(element);
return result;
}
private String[] parseChunks(String s) {
String[] chunks = s.substring(2, s.length() - 2).split("},\\{");
return orderChunks(chunks);
}
private String[] orderChunks(String[] chunks) {
String[] result = new String[chunks.length];
for (String chunk : chunks) {
String[] elements = chunk.split(",");
result[elements.length - 1] = chunk;
}
return result;
}
}
Reference
この問題について([2019 Kakao冬季実習]Q 02管(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@jwkim/2019-kakao-winter-internship-tupleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol