- Korea times
- 끌리면 오라...BGM 광고음악 라이브러리
- KartOO visual meta search engi…
- E-Book
- Channel9
- MSDN
- 여리의 작업실
- 유경상의 .NET 블로그
- window 쪼물딱 거리기
- 블루 홈(소현이 누님)
- IT 관련 전반 내용(정환이네)
- 비너스의 정보 공유(유틸리티들)
- 형기의 자료공간(디지털ERA에서 콘텐츠ERA로)
- EzineArticles (여러 분야의 글들이 올라옴)
- Relationship을 보여주는 라이브러리
- OpenRCE
- 젠틀의 블로그(무선 통신의 모든것)
- 헐랭이와 IT보안
- 워니. 추억ㅇㅔ ㅂㅣ추ㅇㅓ.
- Computer Forensics
- 토익 광장(YBM)
- Korea Times 이용하기
- Larkware Software
- TCP/UDP
- Black Hat
- DEF CON
- Slashdot
- ReallyUsefulEbooks.com Update
- 실리콘밸리 뉴스
- Application Development Trends
- Visual Studio Hacks
- MIT OCW
- Redmond Developer News
- SecurityFocus
- Microsoft Window Hacking Porta…
- Darknet - Don't Learn to Hack …
- Windows Tips, Tricks and Hacks
- Hack In the Box
- (IN)SECURE Magazine
- SuperSite Windows Vista
- Government Security
- Life is Still Talking (Good)
- PHRACK
- Found+Read(resource for startu…
- Jonathan Boutelle
- Venture Hacks
- 스마트플레이스
- All about Intellipedia
- Undocumented Windows 2000 Secr…
- HexBlog (Decompiler)
- TED (Ideas worth spreading)
- Crash Dump Analysis and Debugg…
- Rootkit
- DDK Developers(MS)
- 미친 감자의 블로그
- The Art of Assembly Language
- Chpie (키보드 후킹)
- Drivers Online
- (음악) Delicate SONG
- Reverse Engineering Community
- Software Best Practices
- Sara Ford's WebLog
- Cheat Happens
- Debugging,Unpacking,Assembling…
- 윤석찬님 블로그
- OK 괜찮아 다 잘 될거야
- RingBlog
- Art Life :: 하늘소
- IT's Paradise
- John Robbins!
- Wintellect
- Hacked Gadgets
- 소프트웨어 이야기
- Ryan Naraine's Zero Day
- VULN
- Stay Secure
- EBS 영어 공부(블루워터)
- 101BLoG : "Bright Size Life" o…
- Hacker Challenge
- Hackers Center
- White Hat, Chicago Con
- Ethical Hacker Network
- ChaseNet (Security)
- TechTarget
- Entrepreneur
- Infopackets
- Popular Science
- Dark Reading - The Business of…
- How Stuff Works
- codeDriver - Crack (역공학)
- Gadget (Windows)
- Serious Code
- Iguacu Blog(블루문)
- SecurityProof
- Power of Community(Hacker)
- Crack ?
- Security Freak
- Data Network Resource
- FoundStone - Security Consulti…
- Google Online Security Blog
- (BOOK) Cool DogBooks
- SachaBarber (좋은 개발자)
- System Software Incorporation
- 스카이 벤처
- NewsTorrent
- 글로벌 IT 네트워크
- Ethical Hacking and Infosec
- Realms of Hacking tricks
- CodeBreakers Journal
- Anti Rootkit Blog
- The Reverse Code Engineering C…
- Anti-Debug Tools
- Reverse Code Engineering Video…
- Damn Vulnerable linux
- Security Problems
- French Reverse Engineering Tea…
- Monac
- Open Source Vulnerability Data…
- Viruschaser 검사(바이러스)
- Windows Tips
- 보안 대처 연습
- [Download] Kartz CD
- [Download] FlMS Download
- [Download] DDL2
- 중국 해킹 사이트(안전중국)
- 바이러스 분석
- Javascript 전문가
- Virus Alert Zone (바이러스 분석)
- Computer World
- 문스랩닷컴(보안)
- Unpack China
- Black Storm Reverse Engineerin…
- 역공학 Reverser
- 문화 망명지 - 시, 소설
- WPF MVP
- Research Channel
- The Problem Solver - C# MVP
- Reversing - 리버스 엔지니어링
- Nigel Spencer's Blog (.NET)
- Kirill Osenkov (.NET C# IDE Te…
- H33T (BitTorrnet 검색 사이트)
- ITL (해킹, 보안)
- ITL (Invisible Things Lab) Blo…
- ebook, pdf, chm
- 주식 - 멘토클리닉
- CherryLove - 바이러스, 백신, 악성코드
- PMP
- 영원한 해커, hacker
- 리버싱, PE
- 신호철 - dsphome
- TechEd 2009
- SHOUT
- [도서] 오디오북
- [도서] 전자책
- [도서] 국내도서요약
- [도서] 해외도서요약
- TopCorder - 프로그래밍 연습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- debugging
- MVP
- Microsoft
- C#
- Visual Studio
- .net
- 보안
- Windows
- 디버깅
- 비주얼 스튜디오
- 디버그랩
- english
- VSTS 2010
- 책
- 비주얼스튜디오
- Windows 7
- VSTS
- hacking
- security
- 해킹
- .net framework 4
- 구글
- 닷넷
- 역공학
- .NET Framework
- WPF
- visual studio 2010
- 마이크로소프트
- Today
- Total
NaggingMachine
Snake Traverse 문제 본문
2006년도에 Microsoft 본사 면접을 봤을 때 두번째로 면접볼때 풀었던 문제다. 화이트보드에 직접 코드를 작성하기란 여간 까다로운게 아니어서 15분만에 풀었어야 하는 문제를 30분정도 걸렸던것 같다. 다행히도 면접을 봤던 Diago(현재는 구글 Japan에 근무)가 친절하게 기다려줘서 clear했던 문제. 그런데 이 문제가 구글이나 MS와 같은 IT 기업의 문제 은행으로 등록되어 있다니. 그땐 사전에 미리 공부도 하지 못해서 "뭐 이런 문제를 내지?"라고 생각했었는데, 오늘 우연히 발견하게 되어서 간단하게 풀어보았다. 머리도 식힐겸~
문제의 요구 사항은 NxN 배열이 있을 때 해당 배열의 각 항목을 뱀 꼬리를 잡듯이 하나씩 출력하는 문제다.
영어로 설명하자면, 이렇다.
Given a 2-d array, write code to print it out in a snake pattern. For example, if the array is this:
1, 2, 3
4, 5, 6
7, 8, 9
the routine prints this:
1,2,3,6,9,8,7,4,5The array is an NxN array.
편의상 Python으로 작성했다. 주석이나 이런저런 코드를 빼면 20줄 내외로 작성 가능하다. 생각한 방안은 진행 방향을 고려해서 x와 y의 증가(또는 증감)을 자동으로 계산되도록 한다. 그리고 이 순환이 끝날 수 있도록 min과 max 값을 잘 조절하는게 핵심. 더 좋은 방법이 있을 수 있고, 이게 최선은 아닐 수도 있습니다.
# -*- coding: utf-8 -*- class SnakeTraverse: def __init__(self, dim, tables): self.dim = dim self.tables = tables def traverse(self): # 스네이크 traverse를 하기 위해서는 x와 y 좌표를 통해 방향을 지정한다. # 0 --> 오른쪽으로, 1 --> 아래로, 2 --> 왼쪽으로, 3 --> 위쪽으로 switch = [[1, 0], [0, 1], [-1, 0], [0, -1]] switch_type = 0 # 한번의 traverse가 끝나면 다음 시작 좌표를 조절한다. adjust_to_next_point = [[-1, 1], [-1, -1], [1, -1], [1, 1]] x = 0 y = 0 min_x = 0 max_x = self.dim - 1 min_y = 0 max_y = self.dim - 1 while True: # x와 y의 최소값과 최대값을 변경하여 해당 좌표안에서만 탐색하도록 한다. while ((min_x <= x <= max_x) and (min_y <= y <= max_y)): # 현재 좌표의 값을 찍고 print str(x) + ", " + str(y) + " ==> " + str(self.tables[y][x]) # 다음 좌표로 이동 x = x + switch[switch_type][0] y = y + switch[switch_type][1] # 모든 위치가 탐색될 때 끝난다. if min_x > max_x or min_y > max_y: break; # 다음 순환을 위해 좌표를 보정한다. x = x + adjust_to_next_point[switch_type][0] y = y + adjust_to_next_point[switch_type][1] # 방향에 따라서 x와 y 값의 최대값과 최소값을 변경한다. if switch_type is 0: min_y = min_y + 1 elif switch_type is 1: max_x = max_x - 1 elif switch_type is 2: max_y = max_y - 1 else: min_x = min_x + 1 # 방향을 바꾼다. switch_type = (switch_type + 1) % 4 if __name__ == "__main__": tables_3 = [[0,1,2], [3,4,5], [6,7,8]] tables_4 = [[0,1,2,3],[4,5,6,7],[8,9,10,11],[12,13,14,15]] traverse = SnakeTraverse(3, tables_3) traverse.traverse() traverse = SnakeTraverse(4, tables_4) traverse.traverse()
'TechnoBabbler' 카테고리의 다른 글
Global company의 Global Promotion 작업을 마무리 하며... (0) | 2013.12.13 |
---|---|
Google AppEngine의 데이터를 export 하는 방법 (0) | 2013.12.10 |
ElasticSearch를 이용한 PDF와 Word 문서 검색 서비스 만들기 (0) | 2013.12.01 |
AppInventor2 소스 코드 구동시키기 (0) | 2013.10.21 |
Facebook App을 이용해서 Wall에 글쓰기 How write to Facebook wall via Facebook App (0) | 2013.09.23 |