일전에 뭐 게임 회사에서 본 간단한 퀴즈 테스트 입니다.
0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.
sample inputs: 0123456789 01234 01234567890 6789012345 012322456789
sample outputs: true false false true false
public class Test488 {
public static void main(String[] args) {
duplicateNumbers("0123456789");
duplicateNumbers("01234");
duplicateNumbers("01234567890");
duplicateNumbers("6789012345");
duplicateNumbers("012322456789");
}
private static void duplicateNumbers(String number) {
int[] numberArray = new int[10];
boolean result = true;
if (number.length() != 10) {
result = false;
} else {
for (int i = 0; i < number.length(); i++) {
numberArray[number.charAt(i) - '0']++;
if (numberArray[number.charAt(i) - '0'] > 1) {
result = false;
break;
}
}
}
System.out.println(number + " : " + result);
}
}
0123456789 : true
01234 : false
01234567890 : false
6789012345 : true
012322456789 : false
import java.util.*;
public class DuplicateNumbers {
public static void main(String[] args) {
List<String> list = Arrays.asList(new Scanner(System.in).next().split(""));
System.out.println(list.size() == 10 && new HashSet<>(list).size() == 10);
}
}
2017年02月15日 03:40
/*
dev : peanutBro
date : 170218
content :
일전에 뭐 게임 회사에서 본 간단한 퀴즈 테스트 입니다.
0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.
sample inputs: 0123456789 01234 01234567890 6789012345 012322456789
sample outputs: true false false true false
*/
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int inputCount;
string *inputString;
int** numCount;
bool flagOverlap;
cout << "숫자를 몇개 입력하실껀가요? : ";
cin >> inputCount;
inputString = new string[inputCount];
numCount = new int*[inputCount];
for (int i = 0; i < inputCount; i++)
{
numCount[i] = new int[10]; // 10은 0~9
for (int j = 0; j < 10; j++)
{
numCount[i][j] = 0;
}
}
cout << "숫자를 " << inputCount << "개 입력하세요 : ";
for (int i = 0; i < inputCount; i++)
{
cin >> inputString[i];
}
for (int i = 0; i < inputCount; i++)
{
for (int j = 0; j < inputString[i].length(); j++)
{
numCount[i][inputString[i][j]-'0']++;
}
}
for (int i = 0; i < inputCount; i++)
{
flagOverlap = true;
for (int j = 0; j < 10; j++)
{
if (numCount[i][j] != 1)
{
flagOverlap = false;
}
}
if (flagOverlap)
{
cout << "true ";
}
else
{
cout << "false ";
}
}
for (int i = 0; i < inputCount; i++)
{
delete[] numCount[i];
}
delete[] numCount;
delete[] inputString;
return 0;
}
2017年02月18日 19:00
파이썬 2.7
data = raw_input('?')
if len(data) != 10:
print 'false'
else:
da = [da for da in data]
if len(set(da)) == 10:
print 'true'
else:
print 'false'
2017年02月23日 22:03
파이썬입니다. 0이 10개 들어있는 list를 만드는 것을 좀더 간단하게 하는 좋은 방법이 있을까요? MATLAB에서는 a=zeros(1,10) 이런 식으로 합니다.
input_nums=['0123456789','01234','01234567890','6789012345','012322456789']
for nums in input_nums:
# declare an array (or list) to store the frequency of presence of each number
check_cnt=[]
for p in range(0,10):
check_cnt.append(0)
# add frequency
for num in nums:
check_cnt[int(num)]+=1
# check if each number is used only once
check_freq=True
for freq in check_cnt:
if freq!=1:
check_freq=False
break
# print result
print(check_freq)
public void go(String num) {
boolean a=true;
char [] split = num.toCharArray();
if(split.length!=10) a=false;
for(int i=0 ; i<split.length-1 ; i++) {
for(int j=i+1 ; j<split.length ; j++) {
if(split[i]==split[j]) a=false;
}
}
System.out.print(a);
}
0~9까지 한 번씩 써야하므로 input의 크기가 10이여야만 하니까 10이 아니면 return false boolean 배열을 만들어 0~9가 다 쓰였는지 체크합니다.
public class Duplicate_number {
private String num = "1352469870";
private boolean check[] = new boolean[10];
public boolean go(){
if(num.length() != 10)
return false;
String b[] = num.split("");
for(int i = 0, temp = 0; i < 10; i++){
temp = Integer.parseInt(b[i]);
if(check[temp] == true)
return false;
else
check[temp] = true;
}
return true;
}
}
2017年03月19日 22:35
풀이 작성