코딩도장

Duplicate Numbers

일전에 뭐 게임 회사에서 본 간단한 퀴즈 테스트 입니다.

0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.

  • sample inputs: 0123456789 01234 01234567890 6789012345 012322456789

  • sample outputs: true false false true false

no duplicates
(追記) (追記ここまで)
댓글 작성은 로그인이 필요합니다.
+1 sample output에서 두 번째꺼는 01234니까 0~9사이의 숫자가 각각 하나씩 사용되어서 true 아닌가요?? 아니면.... 0~9까지 모든 숫자가 나와야 하는건가요??? - SPJung, 2015年12月31日 10:44 M D
+1 두 번째 예시는 한 번씩이 아니라 0번 씩 사용된 숫자들이 있으므로 false 입니다. - SungWook Jung, 2017年04月24日 15:17 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

501개의 풀이가 있습니다. 2 / 51 Page

def solution(k):
 m=int(len(k))
 indx=str(k)
 for j in range(0,m-1):
 for l in range(1,m):
 if j!=l:
 if indx[j]==indx[l]:
 return False
 return True

2019年08月08日 12:47

이성표

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

0부터9 니까 무조건 숫자 10개가 나와야 한다는 것과, 집합은 중복을 사용하면 안된다는 생각을 이용했습니다

number = input('numbers?')
if len(list(number)) != 10 or len(list(number)) != len(set(number)):
 print ('false')
else:
 print ('true')

2020年05月05日 07:10

아울

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def check_duplicate(num):
 if len(num) == len(set(num)) == 10:
 return True
 return False
#num = input()
num = ['0123456789','01234','01234567890','6789012345','012322456789']
for i in num:
 print(check_duplicate(i))

딕셔너리 사용해서 카운트하는걸로 작성했다가 set을 이용하는 것을 보고 lv1도 제겐 높은 수준임을 느끼고 갑니다 ᅮᅮ

2021年03月26日 22:31

잘해보자

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

a = list(input("0~9까지 숫자를 한번씩 입력하시오 :"))

print ("True" if '0123456789' == "".join(sorted(a)) else "False")

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
number = set(input("enter number:"))
if len(number) != 10:
 print("False")
else:
 print("True")

2022年07月20日 17:16

쑥갓

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def Check(s):
 a = []
 for i in range(10):
 a.append(0); 
 for c in s :
 if c not in str( range(10) ) :
 return False
 a[int(c)]+=1
 for i in range(10):
 if ( a[i] != 1 ) :
 return False
 return True
s = "0123456789 01234 01234567890 6789012345 012322456789"
for s1 in s.split() : 
 print Check(s1) and "true" or "false" ,

2015年09月16日 10:45

Kim JungRae

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

C#

 private bool checkCount(string test)
 {
 char[] array = test.ToCharArray();
 int max =
 (from t in array
 group t by t into g
 select g.Count()).Max();
 return max > 1 ? false : true;
 }
댓글 작성은 로그인이 필요합니다.
이렇게 하면 중복은 발라낼 수 있는데 빠진 숫자가 있는지 체크가 안 될꺼 같아서 static private bool checkCount(string test) { char[] array = test.ToCharArray(); int max = (from t in array group t by t into g select g.Count()).Max(); int cnt = (from t in array group t by t into g select g.Count()).Count(); return ( max == 1 && cnt == 10) ? true : false; } static void Main(string[] args) { string s = "0123456789 01234 01234567890 6789012345 012322456789"; foreach (string ss in s.Split() ) Console.WriteLine( ss + " " + ( checkCount(ss) ? "true" : "false" ) ); } 이렇게 고쳐봤습니다. 개인적으로 from select 이런 식의 C#구문 처음 써보는데 편하군요. - Kim JungRae, 2015年09月16日 15:55 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import math
str_inputVal=input("input :")
num_inputTrans=int(str_inputVal)
#자리수 계산용 코드
num_digit=int(math.log10(num_inputTrans))+1
set_mem=set()
for i in range(num_digit):
 set_mem.add(num_inputTrans%10)
 num_inputTrans=int(num_inputTrans/10)
if set_mem.__len__()==10:
 print("입력된 값에는 0~9까지 모두 있습니다.")
else:
 print("입력된 값에는 0~9 중 "+str(10-set_mem.__len__())+"개가 부족합니다.")

윗 분과 같이 set은 중복을 허용치 않는다는 것을 이용하여 제작하였습니다.

중간의 math.log10()부분은 입력받은 수의 자릿수를 구하기 위해 만든 부분입니다.

자릿수를 이용해서 for문으로 회전시켜 각 자릿수를 set 에 저장한 후 set의 크기를 이용해서 빠진 숫자가 있는지 확인하는 방식입니다.

참고로 이 방법에서 string으로 받은 문자열을 integer로 변환하는 과정이 있어 0으로 시작할 경우에는 0을 제외하게 됩니다. 만약 제일 처음 0을 무시하게 하고싶지 않다면 인풋을 받은 후 바로 앞이 "0"인지 확인하고 그후 set에 0을 집어넣으면 됩니다. 만약 0이 앞부분에 2개 이상이더라도 이 문제는 중복을 확인하는 문제임으로 무시해도 상관없다 생각합니다.

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

C# 박재우님의 아이디어를 차용해서 새로 짜 보았습니다.

 private bool checkCount2(string test)
 {
 char[] array = test.ToCharArray();
 return Enumerable.SequenceEqual(array, array.Distinct().ToArray<char>());
 }

2015年09月17日 09:39

임 정구

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Javascript

var isDigitOneUsed = function(str) {
 if (str.length < 10 || str.length > 10)
 return false;
 return isDuplicate(str);
},
isDuplicate = function(str) {
 var usedMap = {};
 for (var i=0; i<str.length; i++) {
 if (usedMap[str[i]]) return false;
 else usedMap[str[i]] = true;
 }
 return true;
};
//test
var input = '0123456789 01234 01234567890 6789012345 012322456789'.split(' ');
for (var i=0; i<input.length; i++)
 console.log(isDigitOneUsed(input[i]))
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

(注記) 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
풀이 작성은 로그인이 필요합니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

no duplicates x 1

언어별 풀이 현황
전 체 x 501
python x 321
java x 68
기 타 x 61
cpp x 16
cs x 13
javascript x 9
objectivec x 5
ruby x 1
php x 3
r x 3
matlab x 1
코딩도장 © 2014 · 문의 [email protected]
피드백 · 개인정보취급방침 · RSS

AltStyle によって変換されたページ (->オリジナル) /