대체 FizzBuzz 질문 [닫힘]


88

아무도없는 좋은의 FizzBuzz 타입 질문이 FizzBuzz 문제?

나는 누군가를 인터뷰하고 있는데 FB는 상대적으로 잘 알려져 있고 암기하기 어렵지 않기 때문에 아이디어를 찾는 첫 번째 중지는 나의 새로운 중독 SO입니다.

답변:


104

저는 FizzBuzz처럼 후보자를 제거하는 데 사용되는 비교적 간단한 프로그래밍 문제의 작은 목록을 보았습니다. 난이도가 증가하는 순서대로 내가 본 몇 가지 문제는 다음과 같습니다.

  1. 문자열 반전
  2. 문장 뒤집기 ( "bob likes dogs"-> "dogs likes bob")
  3. 목록에서 최소값 찾기
  4. 목록에서 최대 값 찾기
  5. 나머지를 계산합니다 (분자와 분모가 주어지면).
  6. 중복을 포함하는 목록에서 고유 한 값을 반환합니다 (예 : "1 3 5 3 7 3 1 1 5"-> "1 3 5 7").
  7. 고유 한 값과 그 개수를 반환합니다 (즉, 위 목록은 "1 (3) 3 (3) 5 (2) 7 (1)"이 됨).
  8. 식 문자열 (변수, + 및-만)과 변수 / 값 쌍 집합 (예 : a = 1, b = 7, c = 3, d = 14)이 주어지면 식의 결과 ( "a + b + c -d "는 -3)입니다.

이것들은 Java 용이었고 표준 라이브러리를 사용할 수 있으므로 그중 일부는 매우 쉬울 수 있습니다 (예 : 6). 그러나 그들은 FizzBuzz처럼 작동합니다. 프로그래밍에 대한 단서가 있다면 가장 빨리 할 수있을 것입니다. 언어를 잘 모르더라도 적어도 무언가를하는 방법에 대한 아이디어를 제공 할 수 있어야합니다.

이 테스트를 사용하여 이전 상사 중 한 명이 모든 것을 빠르게 처리 한 사람부터 가장 빠르게 할 수있는 사람, 30 분 후에 한 사람에게 대답 할 수없는 사람까지 모든 것을 보았습니다.

나는 또한 주목해야한다 : 그는 사람들이 이러한 작업을받는 동안 자신의 컴퓨터를 사용하도록했다. 그들은 Google 등을 사용할 수 있다고 특별히 지시 받았습니다 .


항목 8의 경우 JSR-223 (javax.script) 기반 솔루션이 허용됩니까? :-P (분명히 그것의 사용은 완전히 과잉이지만 어떤 사람들은 java.util.Scanner를 사용하는 것보다 그것을 선호합니다.)
Chris Jester-Young

4
그것은 질문의 정신에 대한 내 생각에 속하지 않지만, 당신이 그것을 제안 할만큼 충분히 알고 있다면, 당신은 확실히 FizzBuzz 질문을 통과 할만큼 충분히 알고 있으므로 나는 당신을 반대하지 않을 것입니다. 그것은 당신에게 유리할 수도 있습니다. 나는 여전히 javax.script없이 어떻게 할 것인지 물어볼 것입니다.
MBCook

3
나는 당신의 대답을 한동안 읽고 있었고 무슨 일이 일어나고 있는지 알아낼 수 없었습니다. 왜 내가 그것을 좋아하지 않았습니까? 당신의 질문은 코딩하는 것이 재미 있지 않다는 것입니다 :) (이것은 의도했기 때문에 괜찮습니다 인터뷰). 이 주석에 대한 실제적인 의미는 없지만 내 시스템에서 꺼내고 싶었습니다. :) 모든 스마일에 대해 죄송합니다
Trufa

1
8 번에 대한 샘플 솔루션을보고 싶습니다. 처음 7 개는 산들 바람이지만 8 (나에게)은 나머지에 비해 조금 더 복잡해 보입니다. 저는 Python 3.x에서 작업 중이며 완전히 다른 게임입니다. 아마도 내가 알지 못하는 것입니다.
DonutSteve

31

아마도 이것은 귀하의 질문에 직접적으로 대답하지 않지만 다른 문제를 생각 해낼 필요가 있는지 확실하지 않습니다. "기억하기 쉬운"것 외에도 FizzBuzz 질문은 "쉬운"단순한 질문입니다. 그게 요점입니다. 인터뷰하는 사람이 FizzBuzz가 "잘 알려진"사람들의 클래스에 속한다면, 그들은 FizzBuzz 유형의 질문이 걸러 내지 않을 사람들의 클래스에 속합니다. 그것은 당신이 그 자리에서 그들을 고용한다는 것을 의미하지는 않지만 그들이 그것을 통해 바람을 피우고 인터뷰의 핵심에 도달 할 수 있어야 함을 의미합니다.

다시 말해, Coding Horror 를 읽는 데 시간을 할애하는 사람은 더 많은 인터뷰를 할 가치가 있습니다. 해결책을 빨리 작성하고 간략하게 토론 (예 : 어떻게 테스트합니까?) 한 다음 다음 질문으로 넘어가도록합니다. 그리고 기사에서 말하는 것처럼 "가장 간단한 프로그래밍 작업을 수행 할 수없는 후보자가 얼마나 많은지 정말 놀랍습니다."


7
좋은 대답입니다. "FizzBuzz는 쉽습니다. 그게 요점입니다 ... 시간을 내서 Coding Horror를 읽는 사람이라면 누구나 인터뷰를 할 가치가 있습니다."QFT. 나는 종종 후보자들에게 "프로그래밍에 대해 어디로 가야합니까?" 나는 항상 얼마나 많은 사람들이 하나의 블로그, 웹 사이트 또는 책을 언급 할 수 없는지에 놀랐습니다.
Noah Sussman

1
동의하지 않습니다. 우리는 지난주에 누군가를 인터뷰했고 받아 들여진 답변에서 # 3을 물었습니다. 그들은 문자 그대로 "오, 나는 fizzbuzz를 기대하고 있었다"라고 말했고 우리의 질문에 대답 할 수 없었다.
frandroid

23

Project Euler 의 초기 버전 은 아마도 좋을 것입니다.

예를 들면 :

문제 25

피보나치 수열은 반복 관계로 정의됩니다.

Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.

따라서 처음 12 개 용어는 다음과 같습니다.

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144

12 번째 항인 F12는 3 자리 숫자를 포함하는 첫 번째 항입니다.

1000 자리를 포함하는 피보나치 수열의 첫 번째 항의 색인은 무엇입니까?


14

나는 그것이 회문인지 확인하는 것이 괜찮은 제초기가 될 수있는 매우 간단한 것임을 발견했다.


언어에 따라 다릅니다. C에서는 흥미로울 수 있지만 Perl에서는 scalar(reverse 'foo') == 'foo'.
jkramer

3
사실이지만 동시에 더 간단한 솔루션을 볼 수 있다는 것은 가치가 있습니다. 그러면 "좋아, 이제 역기능이없는 척"이라고 말합니다.
Mike Stone

1
C ++에서는 손으로 쓴 루프를 포함하지 않는 "기능적"솔루션에 대해 보너스 포인트를 제공합니다. 예 : "return equal (str.begin (), str.end (), str.rbegin ());" 또는 (속도를 좋아하는 사람들의 경우) "return equal (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
물론 그러한 답변을 본 후 후보자에게 코드의 작동 방식을 설명해달라고 요청합니다. 위의 내 대답을 복사하는 것만으로는 다리를 올릴 수 없습니다! :-P
Chris Jester-Young

10

모듈로 연산자를 포함하지 않는 FizzBuzz 질문을 원했습니다. 특히 나는 일반적으로 모듈로 연산자가 그렇게 자주 나오지 않는 웹 개발자를 인터뷰하기 때문에. 그리고 그것이 당신이 정기적으로 마주 치는 것이 아니라면, 당신이 그것을 필요로하는 몇 번 찾게되는 것들 중 하나입니다.

(그렇다면 이상적으로는 어딘가에서 수학 과정에서 접 했어야하는 개념이지만 다른 주제입니다.)

그래서 제가 생각해 낸 것은 제가 상상할 수없이 Threes in Reverse 라고 부르는 것 입니다. 지침은 다음과 같습니다.

1에서 200 사이의 3의 배수마다 역순으로 인쇄하는 프로그램을 작성하십시오 .

일반적인 순서로 쉽게 수행 할 수 있습니다. 200을 초과하는 숫자에 도달 할 때까지 루프 인덱스에 3을 곱한 다음 종료하십시오. 종료 할 반복 횟수에 대해 걱정할 필요가 없습니다. 너무 높은 첫 번째 값에 도달 할 때까지 계속 진행하면됩니다.

하지만 거꾸로 돌아 가면 어디서부터 시작해야하는지 알아야합니다. 어떤 사람들은 198 (3 * 66)이 3의 가장 높은 배수라는 것을 직관적으로 깨닫고 66을 루프에 하드 코딩합니다. 다른 사람들은 수학적 연산 (정수 나누기 또는 부동 소수점 나누기 200과 3에 대한 floor ())을 사용하여 그 숫자를 알아 내고 그렇게함으로써 좀 더 일반적으로 적용 가능한 것을 제공 할 수 있습니다.

본질적으로 FizzBuzz와 같은 종류의 문제입니다 (값을 반복하고 비틀어 출력). 이것은 모듈로 작업만큼 (상대적으로) 난해한 것을 사용하지 않는 해결해야 할 문제입니다.


2
Legion이 궁금합니다. 웹 개발자가 모듈로없이 녹색 금지 / 대체 행과 같은 작업을 어떻게 수행합니까?
Andrew Burns

4
글쎄, CSS3의 n 번째 자식 선택기를 사용하여 교대로 행에 스타일을 적용하려는 경우. jQuery에는 JS를 통해 이러한 작업을 수행하기위한 선택기가 교대로 있습니다. 그러나 더 큰 요점을 말하자면, 위에서 말했듯이, 검색하고 사용하다가 빠르게 잊혀지는 것입니다. 찾는 데 15 초가 걸렸기 때문입니다. 나는 그것을 좋아하거나 승인한다고 말하는 것이 아니라 특히 엔트리 레벨에서 일어난다. :)
Legion

1
여기 내 PHP 솔루션입니다 :) ideone.com/BnJQ3 삼분 :)
Trufa은

Ruby에서는 숫자를 (순서대로) 배열에 넣은 다음 전체 배열을 뒤집는 것처럼 쉽기 때문에 하위 수준 언어에서는 더 어려울 것입니다. ideone.com/MKKb6
Kerrick

Python :print [x for x in xrange(3, 200, 3)][::-1]
beatgammit 2012

8

피보나치, 문자열 반전, 바이트에 설정된 비트 수는 다른 일반적인 것들입니다. 프로젝트 오일러 에는 점점 더 많은 난이도가 있습니다.


Fibonaaci는 조금 더 고급이지만 좋은 것입니다. 저는 완전한 초보자이며 20-25 분 정도 걸렸으므로 참고 자료가 있습니다. :)
Trufa

나는 Fibonacci, FizzBuzz에 맞았고 배열에서 중복 된 정수를 제거했습니다-오늘 모두 인터뷰에서 (4 시간)
IAbstract

8

10 초 만에 완료 할 수있는 매우 간단한 작업을 수행하지만 문자 그대로 아무것도 프로그래밍 할 수없는 사람들을 제거하려면 다음을 시도하십시오.

질문 : 두 변수의 값을 바꾸는 방법을 보여주세요 (종이에는 있지만 화이트 보드에는 더 좋습니다).

이것은 내 생각이 아니었지만 원래 FizzBuzz 질문에 대한 모든 블로그 게시물 에 Jacob이라는 사람 의 댓글게시되었습니다 .

Jacob은 계속해서 말합니다.

그들이 세 번째 변수를 만드는 것으로 시작 하지 않는다면 , 그 사람을 거의 쓸어 버릴 수 있습니다. 나는 그 질문만으로도 지원자들의 1/3에서 절반을 줄일 수 있다는 것을 발견했습니다.

세 번째 변수 (더하기 / 빼기, xor 등)없이이 변수 스와핑을 수행하는 방법에 대한 원래 블로그 게시물에 대한 추가 흥미로운 토론이 있습니다. 물론이를 지원하는 언어를 사용하는 경우 단일 명령문 / 연산에서는 그렇게 좋은 테스트가 아닐 수 있습니다.

제 생각은 아니지만, 아주 단순한 프로그램을 작성한 사람이 약 10 초 이내에 답변 할 수있는 (그리고 그래야하는) 우아하고 간단하고 쉬운 질문이기 때문에 여기에 게시하고 싶었습니다. 또한 모듈로 연산자와 같이 다소 모호한 연산자를 사용할 필요가 없습니다. 그렇지 않으면 상당히 괜찮은 프로그래머 인 많은 사람들이 단순히 익숙하지 않습니다 (내 경험으로 알고 있음).


1
아주 좋은 생각이라고 생각합니다. 후보자가 for 대신 foreach를 사용하는 이유와 수정 방법을 궁금해하는 프로그램을 고통스럽게 디버깅하는 동안 20 분 동안 앉아있는 것보다 훨씬 좋습니다! (방금 한 것처럼)
mike nelson

std :: swap (a, b); 왜해야 내가 바로 모든 표준 라이브러리에 대해 지금까지 나를 위해 이렇게 행복 할 때 세 번째 변수를 생성?

@Dan-아이디어는 라이브러리를 사용 하지 않고 선택한 언어로 내장 된 키워드 만 사용하지 않고 이를 수행하도록 요청받는 것 입니다. 물론, 현실 세계에서는이를 달성하기 위해 라이브러리 루틴을 사용할 수 있습니다. 이는 직접 작성하는 것이 아니라 링크 된 목록 구조에 대해 라이브러리 루틴을 사용하는 것과 같습니다. 이 테스트의 점은 기대에 충분히 간단하지 밖으로 질문 점이다 어떤 후보가없이 할 수 있기를 필요로 그것을 달성하기 위해 도서관에 의지.
CraigTP

그렇다면 Jacob은 인터뷰 대상에게 세 번째 변수를 사용하라고 제안하고 있습니까? 개발자에게 세 번째 변수를 사용하지 않도록 요청하는 질문에 대한 대안을 보았습니다. 그가 대답 한 방식은 매우 모호합니다.
theGreenCabbage

1
그들이 단지 "괜찮은"프로그래머라고 생각하는 사람으로서 이것은 나를 두렵게했다. 내 즉각적인 생각은 "신 이시여, 나는 세 번째 변수를 사용할 것입니다. 그러나 그는 확실히 그는 변수없이 그것을하는 어떤 영리한 방법을 원합니다!"
Devil 's Advocate

4

주어진 숫자의 인수를 반환하는 앱을 작성하도록 요청하십시오. 단기간에 잘하기는 쉽지만 잘하기는 어렵습니다. 그들의 스타일과 그들이 문제를 해결하는 방식을 짧은 시간 안에 볼 수 있습니다.


2

문자열 Y 내에서 문자열 X가 처음 나타나는 인덱스를 반환합니다.

strstr ()을 구현하려면 언어에 대한 기본적인 이해와 영리한 최적화 기회를 제공해야합니다.


2

C / C ++ 인터뷰라면 그 사람이 포인터에 대해 알고 있는지 확인하십시오.

일반-단순 알고리즘 ([단일 / 이중] 연결 목록). 각 경우에 추가의 복잡성에 대해 질문하십시오 (시작, 끝, 최적화 ...)?

(일반) 3 * N / 2 비교만으로 배열 (N 크기)에서 최소값과 최대 값을 어떻게 찾습니까?

C / C ++ : 여러 "strcat"을 버퍼에 어떻게 최적화 하시겠습니까?


"단지 3 * N / 2 비교로 배열 (N 크기)에서 최소값과 최대 값을 어떻게 찾을 수 있습니까?"라는 문제에 대한 것 같습니다. 숫자 3 * N / 2는 배열 요소의 수 비교라는 것을 명확히하는 것이 좋지만, 예를 들어 int를 자유롭게 비교할 수 있습니다. 예 : 루프에서 (i <배열 크기).
sergtk


0

방법 : 단일 정수를 사용하여 여러 값을 저장하고 싶습니다. 그것이 어떻게 작동하는지 설명하십시오.

비트 마스크와 작업에 대한 단서가 없다면 다른 문제를 해결할 수 없을 것입니다.


9
비트 가면을 설명하거나 지적한 후 사람이 이마를 치지 않고 자기 조롱으로 고개를 흔들면 더 유익하다고 말할 것입니다. 비트 마스크는 C, 임베디드 장치 또는 네트워킹을 사용하지 않는 한 일반적인 관용구가 아닙니다. 많은 재능있는 사람들은 그렇지 않았습니다.
Gregg Lind

2
흠, 그런 다음 3 개의 변수를 선언하는 것에 비해 수학이 추악 할지라도 십진수 123에 1,2 및 3을 저장하는 것이 정답으로 간주되는지 여부를 결정해야합니다. 또는 x = 1을 작성하여 1,2,3을 저장합니다. x = 2; x = 3; 이 값을 동시에 저장해야합니까?
MatthewMartin 2009

0

소수 목록을 찾는 것은 상당히 일반적인 질문이지만 여전히 약간의 생각이 필요하며 사람들이 줄 수있는 답변의 정도는 다양합니다.

또한 얼마나 많은 사람들이지도 / 사전 유형 데이터 구조를 구현하는 데 어려움을 겪고 있는지 놀라실 것입니다.


0

나는 후보자들에게 자신이 선택한 의사 언어로 주어진 숫자의 계승 을 계산하는 프로그램을 만들도록 요청 했습니다. 해결하기 매우 쉬운 문제이며 재귀에 대한 자연스러운 후속 질문 (종종 요청 될 수 있음)에 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.