알고리즘이 올바른 경우 알고리즘을 작성하는 데 시간이 얼마나 걸립니까? [닫은]


11

최근에 Facebook에 프로그래밍 문제가 있음을 알게되었습니다. 올바르게 완료하면 자동으로 전화 인터뷰를받습니다.

하노이 타워형 문제를 해결할 수있는 알고리즘을 작성하도록 요청하는 샘플 문제가 있습니다 . 다수의 페그 및 디스크가 주어지면 초기 및 최종 구성; 알고리즘은 최종 구성에 도달하고 단계를 출력 할 수있는 최소 단계를 결정해야합니다.

이 샘플 챌린지는 45 분의 시간 제한을 제공하지만 시간 제한이 만료되면 코드가 계속 통과하는지 테스트 할 수 있습니다.

나는 그것을 해결할 수있는 귀여운 수학 솔루션을 몰랐으며, 그것이 부정 행위라고 생각하기 때문에 그것을 찾고 싶지 않았습니다. 그래서 나는 최선을 다해 도전을 해결하려고 노력했다.

작동하고 통과 한 알고리즘을 만들 수있었습니다. 그러나 45 분 소요보다 훨씬 긴 4 시간이 걸렸습니다. 할당 된 시간보다 훨씬 오래 걸리기 때문에 실제 도전을 시도하지 않았습니다.

그래도 궁금해졌습니다. 실제로 실제로 그렇게 오래 걸렸습니까? 나는 이것이 Facebook (Google, Fog Creek 등)과 같은 곳에서 일자리를 얻을 수 없으며 내 열망을 낮추거나 실제로 통과했다는 사실을 나타냅니다. 너무 오래 걸렸지 만 처음 시도 할 때


12
여기가 중요합니다-당신에게 충분합니까?

2
큰 .com 이름으로 일하지 않는 것이 열망을 낮추는 것을 의미한다고 생각하는 이유는 무엇입니까?
mouviciel

@mouviciel 나는 큰 .com 이름으로 일하는 것에 대한 열망을 낮추는 것이 아니라 프로그래밍이 주된 역할을하는 회사에서 일하는 것보다 소매업과 같이 다른 사람이하는 일을 아무도 이해하지 못하는 회사에서 일하는 것과 비슷하다는 것을 의미했습니다.
JD Isaacks

5
Fog Creek의 LOL은 Facebook 및 Google에 포함되어 있습니다.
georgiecasey

답변:


42

실제로 시간 얼마나 걸리든 상관 없습니다. 45 분 안에 문제를 해결할 수 있는 것은 4 시간이 걸리는 생산성보다 5 배 더 생산적이어서 고용주에게 더 ​​매력적입니다.

즉, 이 문제를 해결하기 위해 4 시간이 걸 렸는지 말하지 않아도 됩니다.

  • 당신은 최선을 다하고 있었습니까 (잘 먹고 피곤하지 않고 완전히 집중되어 있습니까)?
  • 문제가 잘 명시되어 있거나 직접 추가 조사를해야합니까?
  • 이를 위해 새로운 것을 배워야 했습니까?
  • 도구가 익숙 했습니까?
  • 기타

이 모든 것들이 시간이 걸리는 데 영향을 줄 수 있으며, 실제로 모든 일을 듣지 않고 손에 든 도구를 사용하지 않고도 압박을받을 때 문제를 해결할 수있는 것이 더 중요합니다. 일반적으로 성공 여부에 관계없이 누군가에게 매우 중요한 시점에 있습니다.


답변 주셔서 감사합니다. 왜 오랜 시간이 걸 렸는지에 대한 답을 얻으려면 실제로 필요한 일을 이해하는 데 약간의 어려움이 있었기 때문에 그 부분을 이해 한 후에도 계획을 세우려면 약간의 생각이 필요했습니다. 예를 들어, 디스크가 디스크를 차단하고있는 경우 이동하려는 디스크를 먼저 이동해야합니다. 실제로 프로그래밍 부분이 가장 짧았지만 시간이 더 걸렸습니다.
JD Isaacks

@JohnIsaacks 그래서 문제는 당신이 하노이 타워에 익숙하지 않다는 것입니다. 내가 아는 대부분의 프로그래머는 재귀에 관해 배울 때 그것에 대해 소개 받았다. (각 디스크 이동은 본질적으로 재귀에 멋지게 매핑되는 빈 나무 못으로 디스크를 이동시킨다). 정식 교육을 받았습니까? 그렇다면 어느 수준입니까?

@ ThorbjørnRavnAndersen, 나는 학교에서 프로그래밍을 배우지 못했습니다. 나는 스스로 가르쳤고, 직업, 책, 실험 등을 통해 배웠습니다. 나는 게임에 익숙하지 않았습니다 (유인원 행성에서 비슷한 게임을 기억하는 것을 제외하고). "하노이의 탑"이라고 나는 재귀를 이해하고 (적어도 내가 생각한다고 생각한다) 나는 그것을 여기에서 사용했다. 그러나 퍼즐을 푸는 것이 훨씬 쉬웠을 것입니다. 더 어려운 부분은 "언제 어떤 패턴을 움직일 때마다 가장 적은 양의 움직임을 만들어 낼 것인가"였습니다.
JD Isaacks

@JohnIsaacks 프로그래밍은 피아노 연주와 매우 흡사합니다. 혼자서도 좋은 결과를 얻을 수 있지만 실제로는 좋은 경험을 얻으려면 숙련 된 교사가 올바르게하는 방법을 배워야합니다. 퍼즐을 풀 수있는 방법에 대해 자세히 설명 할 수 있지만 "최적"부분을 찾기가 어렵습니까?

조각을 제자리로 옮기고 블로킹 조각을 다른 곳으로 옮긴 다음 다음 조각으로 다시 시작하는 재귀 함수를 만들 수 있습니다. 가장 큰 조각부터 시작하여 가장 작은 조각까지 내려갑니다. "최적인가"부분은 블로킹 피스를 움직일 때 발생합니다. 이동 위치에 따라 불필요한 단계를 추가로 만들 수 있습니다. 예를 들어 1을 3으로 이동하면 3을 차단하고 3을 이동해야 할 때 다시 이동해야하지만 현재 구성에 따라 피할 수 없을 수도 있습니다.
JD Isaacks

13

현금 흐름이 좋은 일반 개발자를 찾는 회사에게는 중요 합니다. 더 빨리 더 많은 작업을 수행 할 수 있기 때문입니다. 그러나 다른 많은 경우에, 그것은 중요하지 않습니다 (사실, 대부분의 경우에 주장 할 것이다) 만큼 당신과 같은 문제를 해결하는 능력 , 그리고 그들을 잘 해결하는 능력 .

다섯 가지 유형의 문제 해결사를 생각할 수 있습니다.

그 사람 ...

  1. ... 문제를 해결할 수 신속하게 으로, 깨끗 하고 효율적인 솔루션입니다.
  2. ... 문제를 신속하게 해결할 수 있지만 더럽고 비효율적 인 솔루션입니다.
  3. ... 문제를 느리게 해결할 수 있지만 깨끗 하고 효율적인 솔루션으로 끝납니다 .
  4. ... 문제를 느리게 해결할 수 있지만 더럽고 비효율적 인 솔루션으로 끝납니다 .
  5. ... 빠르거나 느리게 문제를 해결할 수 없습니다 .

Facebook 스타일 테스트는 시간 제약이 있기 때문에 # 3, # 4 및 # 5 후보를 명시 적으로 제거하므로이 테스트는 # 1 또는 # 2 후보 만 고용해야한다고 결정한 고용주를위한 것입니다 ( 추가 심사에 따라).

몇 가지 예 :

  • Facebook 과 같은 고용주 는 슈퍼 스타 프로그래머에게 엄청난 급여를 줄 수 있기 때문에 # 1 프로그래머 만 찾고 있을 것입니다.
  • (일부 웹 디자인 상점과 같이) 일회성 판매량많은 고용주 는 동등하게 효과적인 # 1 개발자보다 저렴한 # 2 개발자 만 원할 수 있습니다 .
  • 특수 문제 도메인 (예 : 대출 출처 소프트웨어 작성) 이있는 고용주 는 이중 학위 천재 개발자가 매우 비싸거나 찾기 어려울 수 있기 때문에 # 1 개발자 보다 # 3 개발자를 받아 들일 수 있습니다.
  • 다양한 이유로 관심이 없거나 예산이 한정된 고용주 는 # 4 개발자 라면 괜찮을 것입니다 .
  • # 5 개발자는 찾고있는 것을 모르고 지원자를 선별하지 못하는 회사에 고용됩니다.

5

하노이 타워? 그것은 내가 대학에서 신입생 과정에서 처음으로 한 프로그램 과제 중 하나였습니다 (피보나치 직후-예, 나는 그 기능적인 프로그래밍 괴물 중 하나와 함께 수업을했습니다 :). 저는 컴퓨터 공학도 아니고 컴퓨터 공학도하고 있습니다.

그럼에도 불구하고 대부분의 프로그래머는 끔찍하기 때문에 대부분의 소위 '프로그래머'는 이러한 종류의 알고리즘을 올바르게 작성할 수 없습니다. (추가 재미를 위해 fizzbuzz를 검색)

어쨌든 일단 특정 임계 값을 초과하면 프로그래밍 기술이 프로젝트를 완료하는 능력, 어려움에 대한 탄력성 등 중요하지 않다고 생각합니다.

페이스 북은 최고의 개발자들을 고용하고 싶어하지만, 그런 종류의 게임으로 얼마나 많은 것을 얻고 싶어하는지 모르겠습니다. 나는 그들이 끔찍한 나쁜 프로그래머와 시간을 잃고 싶지 않다고 생각합니다.

제가 항상 듣게되는 팁은 멋진 기술 회사에서 채용을 원한다면 오픈 소스 프로젝트에 참여해보십시오. 또한 인턴십을 받으십시오.


3

공급이 많을 때 (많은 프로그래머가 될 것임) 수요가 적을 때 (프로그래밍 작업이 거의 없음) 고용주는 원하는만큼 요구할 수 있습니다. 사실, 그들은 까다로운 일을해야합니다. 그래서, 그들은 이렇게 빨리 가능한 한 짧은 목록을 얻을로 후보에게 매우 어려운 시험을주고있다, 그래서 같은 그들은 심지어 아주 좋은 단지 좋지 않다, 실제로하지 않은 사람들을 인터뷰 될 수 있도록하는 카리스마를 .

따라서 할당 된 시간 내에 테스트를 완료하지 않았다고해서 프로그래머가 나쁜 것은 아닙니다. 당신은 단지 페이스 북이 카리스마로 간주하는 것에 대한 정의에 맞지 않습니다. 제 생각에는 괜찮습니다.


0

시간이 흐르지 만 더 오래 걸리면 멍청하다는 생각이 들지 않습니다. 많은 사람들이 "암기 한 것"을 가지고 있습니다. 그들은 재귀와 같은 기술을 너무 많이 적용하여 2cd 성격이됩니다. 그들의 똑똑한 것이 아닙니다. 그들은 단지 2cd 자연의 시점까지 연습했으며 당신도 할 수 있습니다!

다음 수학 문제를 고려하십시오. 2 + 2 =?

당신이 대답이 4라는 것을 즉시 알고 있다면 그것은 똑똑하기 때문이 아니라 2cd 성질이기 때문입니다. 추가를 배우는 어린이는 답을 얻기 위해 가장 기본적인 계산 작업을 수행해야 할 수 있습니다. 그러나 그 아이는 성인을 능가 할 가능성이 있습니다.


-1

사람들은 당신이 무언가를하는 데 얼마나 많은 시간을 소비하는지 실제로 신경 쓰지 않습니다. 마감일을 맞추고 모두 잘 지내십시오.


7
마감 시간이 "지금부터 45 분"이고 4 시간 후에 완료하면 사람들이 돌보는 것입니다.

1
무엇 다드 수단은 당신이 마감 시간을 충족하기 위해 초과 근무를 할 수 있다는 것입니다 : D
quant_dev

1
다른 개발자들에게 초과 근무가 필요하지 않은 일을하기 위해 초과 근무를해야하는 경우-똥이 실제로 팬을
때릴

-1

그것은 매우 긴장되어 있습니다. 하노이 탑 15 분에 대해 읽고 IDE를 시작하고 빈 솔루션을 생성하십시오 -5 분, 문제를 해결하는 데 25 분 밖에 걸리지 않습니다. 인터페이스 디자인이 좋은 안전한 클래스와 같은 모든 배관으로 코드를 작성하는 데는 10 분 정도의 시간이 필요하므로 실제 아이디어에 15 분 남았습니다. 하노이의 탑이 무엇인지에 따라 충분할 수도 있습니다. 그리고 때로는 다른 문제를 해결하는 동안 문제가 저절로 해결되도록해야합니다. 바로 그 자리에서 솔루션을 볼 수 없기 때문입니다. 따라서 병렬 스레드에서 무료로 해결되지만 즉시 발생하지는 않습니다.

어쨌든, 그것은 가장 큰 회사 중 하나이므로 원하는대로 할 수 있습니다. 그러나 시간 제한은 IMHO 인터뷰에서 최악의 요소 중 하나입니다. 저는 항상 압박감을 느끼고, 서두르고, 모든 것을 깨끗하게 할 수 없으며, 실제로 일할 때 매우 중요한 모든 세부 사항에 집중할 수 없습니다. :) 물론 모든 솔루션이 작동하도록 관리자에 대한 액세스 권한을 설정하는 등의 솔루션을 신속하게 해결할 수 'SELECT * FROM pass WHERE usr == ' + user_input는 있지만 자랑스럽고 안전하고 잘 작성된 작업에는 시간이 필요하며 45 분이 정말 강렬합니다.


1
나는 하노이 탑 문제가 무엇인지 기억하는 사람들을 원한다고 생각합니다 (고전입니다).
quant_dev

IDE를 시작하고 빈 프로젝트를 만드는 데 5 분이 걸립니까? 하노이의 탑을 아직 모른다면 적어도 반대 순서로 수행하여 연구하는 동안 IDE가 (인터넷을 통해 VM에서로드 됨)로드하십시오!
Bryan Boettcher

이와 같은 테스트에서 그들은 반드시 "좋은 인터페이스 디자인"과 "배관"을 찾고 있지는 않습니다. 문제에 대한 이해와이를 해결하기위한 알고리즘을 형성 할 수있는 능력을 기대하고 싶습니다. 언어가 제약 조건이 아닌 경우 Java 및 Eclipse와 같은 것을 사용하는 것이 마지막으로 한 일입니다. 파이썬과 최소한의 텍스트 편집기 / 소형 IDE를 사용하고 있습니다. (자바 자신을 사용한다고 말하지 않고 그냥
말하면
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.