코딩도장

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개의 풀이가 있습니다. 1 / 51 Page

python 2.7.8입니다. 입력값을 sorting해서 0123456789 와 비교하는 방법을 썼습니다.

n = [''.join(sorted(x)) for x in raw_input().split()]
for x in n:
 print "true" if x=="0123456789" else "false",
댓글 작성은 로그인이 필요합니다.
와, 무릎을 탁쳤네요! - 디디, 2016年03月19日 14:42 M D
이렇게 간단한걸... - 예강효빠, 2017年04月20日 07:03 M D
이렇게 하면.. 다른 답변들 과는 달리 숫자가 아는 값이 들어와도 비교가 되겠네요. 감사합니다! - Jaeman Lee, 2021年07月08日 17:21 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

두줄로 만들어 보았습니다.

a = input("0~9 사이의 숫자로 이루어진 문자열 입력 : ")
print('true' if len(a) == len(set(a)) == 10 else 'false')
댓글 작성은 로그인이 필요합니다.
제생각엔 이게 가장 좋은풀이 같아보여요 - fox.j, 2021年01月25日 18:11 M D
와 진짜 세상에서 제일 깔끔한데 함수가 아니어서.. ᅲᅲ - 이병휘, 2022年04月08日 09:52 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 2.7.6 입니다.

print map(lambda n:len(set(n))==10 and len(n) ==10 ,"0123456789 01234 01234567890 6789012345 012322456789".split())
댓글 작성은 로그인이 필요합니다.
그냥 한줄로 가네요... 대단합니다. - Quan Lee, 2017年09月22日 01:05 M D
+1 python 3.X로 한다면 이렇게 해야겠죠. print (list(map(lambda n:len(set(n))==10 and len(n) ==10 ,"0123456789 01234 01234567890 6789012345 012322456789".split()))) - Quan Lee, 2017年09月22日 01:11 M D
왜 list를 붙여야하는지 혹시 이유를 알 수 있을까요? - ss2663, 2021年05月07日 17:18 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
insertion = input()
palette = []
for i in range(0, len(insertion)):
 palette.append(int(insertion[i]))
contrast = list(set(sorted(palette)))
if palette == contrast:
 print("true")
else:
 print("false")

파이썬의 set함수를 활용하면 중복된 원소를 모두 단일화할 수 있으므로, 그렇게 정리된 리스트가 원래의 숫자 입력을 리스트로 만든 것과 동일한가를 판가름하는 구조로 짜 보았습니다.

2015年09月16日 21:01

박재우

댓글 작성은 로그인이 필요합니다.
파이썬의 set이라는 함수가 특이하군요. 중복 제거해서 비교한다는 아이디어도 좋구요. ᄏ - 임 정구, 2015年09月17日 09:13 M D
+1 012345가 false가 안나오고 true라 나오는군요. 0~9까지 숫자가 각 한번씩은 사용되었는지가 문제의 핵심이라..ᅲᅲ - \일레기, 2018年06月13日 23:23 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Java 8

public static void main(String[] args){
 System.out.println(isDuplicated(12345678900l));
}
public static boolean isDuplicated(long number){
 String s = String.valueOf(number);
 return s.chars().distinct().count() != s.length();
}
댓글 작성은 로그인이 필요합니다.
이렇게 쉽게 해결 되다니 좋은 코드 감사합니다. - 황 정석, 2016年08月01日 15:12 M D
+1 숫자를 바꿔 돌려봤는데 뭔가 이상하네요! 죄다 true만 반환되는 것 같은데.. - 김지훈, 2018年07月02日 16:16 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬입니다.

def only_one(string):
 num_set = set(string) # 중복 제거
 if len(string) == len(num_set) == 10: # 중복 제거 한 후의 갯수와 같고 그 갯수가 10이라면
 return "true"
 else:
 return "false"
input_string = "0123456789 01234 01234567890 6789012345 012322456789"
for s in input_string.split(" "):
 print(only_one(s), end=' ')

2015年11月10日 12:25

김경호

댓글 작성은 로그인이 필요합니다.
셋을 생각했었는데, 기존의 자기와 비교한는 것은 생각을 못했네요 훌륭하십니다 - 디디, 2016年03月19日 14:45 M D
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬입니다.

input = "0123456789 01234 01234567890 6789012345 012322456789 1111111111"
for ca in input.split():
 check = [0 for i in range(10)]
 for s in ca:
 check[int(s)] += 1
 print sum(check) == 10 and all(check)
댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

c# 입니다.

 private void Form1_Load(object sender, EventArgs e)
 {
 String inputs = "0123456789 01234 01234567890 6789012345 012322456789";
 String[] Split_input = inputs.Split(' ');
 foreach (String s in Split_input)
 {
 if (Check_NUM(s))
 Console.Write("true ");
 else
 Console.Write("false ");
 }
 }
 private bool Check_NUM(String number)
 {
 List<Char> List_input = new List<Char>();
 char[] data = number.ToCharArray();
 foreach (Char d in data)
 {
 if (List_input.Contains(d))
 return false;
 List_input.Add(d);
 }
 if (List_input.Count == 10)
 return true;
 return false;
 }

공백을 나눈 후 String을 Char 배열로 쪼개서 넣은다음 list클래스의 contain으로 값이 들어있는지 비교를 해보았습니다.

2015年10月06日 11:23

서 원진

댓글 작성은 로그인이 필요합니다.
(注記) 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
#include <string>
using namespace std;
int main( int argc , char** argv )
{
 int array[ 10 ] = { 0 , };
 string input = "012345632789";
 for( size_t i = 0 ; i < input.size() ; ++i )
 {
 array[ input[ i ] - '0' ]++;
 }
 for( int i = 0 ; i < 10 ; ++i )
 {
 if( array[ i ] > 1 )
 {
 cout << "false" << endl;
 return 0;
 }
 }
 cout << "true" << endl;
 return 0;
}

2017年04月16日 21:51

오승석

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

2019年01月12日 10:31

김영성

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

풀이 작성

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

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(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 によって変換されたページ (->オリジナル) /