Code Monkey home page Code Monkey logo

algorithm's Introduction

Algorithm

Travelhow Algorithm Study Files

algorithm's People

Contributors

ddalpange avatar

Watchers

 avatar

algorithm's Issues

회사 조직과 급여

스토리

대기업의 HR 부서에서 일하고 있습니다.
각 직원은 여러 명의 직접적인 매니저와 부하 직원을 가질 수 있습니다.
물론 부하 직원도 부하 직원을 가질 수 있으며, 매니저도 매니저를 가질 수 있습니다.
X 가 A 의 매니저, A 가 B 의 매니저, B 가 A 의 매니저, ... D 가 Y 의 매니저로 하는 A, B, C, D 의 연결이 있다면 직원 X 는 직원 Y 의 상사라고 부릅니다. (물론 X 가 Y 의 직접적인 매니저라고 해도 X 는 Y 의 상사라고 부릅니다).
만약 A 가 B 의 상사라면 B 는 A 의 상사일 수 없습니다. 새로운 기업 정책에 따르면 부하 없는 직원의 급여는 1입니다. 그리고 직원이 부하 직원이 있다면 직원의 급여는 직접적인 부하들의 급여 합계와 같습니다.

string 배열 relations 가 함수의 파라미터로 주어집니다. 이 배열에는 직원 i 가 직원 j 의 직접적인 매니저인 경우 i 번째 요소의 j 번째 글자가 'Y' 로 되어 있으며 아닌 경우 'N' 으로 되어 있습니다. 모든 직원의 급여 합계를 리턴해주세요.

함수 정의

def totalSalary(relations)

제약 조건

relations : 1~50 개의 요소가 있는 배열이며 각 요소는 요소 수와 같은 문자열입니다. 각 문자열은 'Y' 와 'N' 으로 구성되어 있습니다. i 번째 요소의 j 번째 문자는 'N' 입니다.

입력 데이터와 출력 데이터

  • 1번
    relations = {'N'}
    return : 1
    직원이 1 명 밖에 없으므로 답은 1

  • 2번
    relations = { 'NNYN', 'NNYN', 'NNNN', 'NYYN' }
    return : 5
    직원이 4명입니다. 0, 1, 3 은 2의 매니저이고 3은 1의 매니저입니다.

  • 3번
    relations = {
    'NNNNNN',
    'YNYNNY',
    'YNNNNY',
    'NNNNNN',
    'YNYNNN',
    'YNNYNN'
    }
    return : 17

  • 4번
    relations = {
    'NNNN',
    'NNNN',
    'NNNN',
    'NNNN'
    }
    rreturn : 4

재미있는 수학

숫자 3과 9는 재미있는 성질이 있습니다. 3의 배수의 각 자릿수의 합은 다른 3의 배수가 됩니다.
예를 들어 118 x 3= 354 이고 3 + 5 + 4 = 12 는 3의 배수입니다. 마찬가지로 9의 배수의 각 자릿수의 합은 다른 9의 배수가 됩니다. 예를 들어 75 x 9 = 675 이고 6 + 7 + 5 = 18 은 9의 배수입니다.

어떤 진법에서 이러한 성질을 갖는다고 다른 진법에서 이러한 성질을 가지지는 않습니다. 예를 들어 10 진수에서 3은 이러한 성질을 가지지만 5진수에서는 성립하지 않습니다.

예를 들어 3 x 4 를 생각해봅시다.

  • 10 진수 : 3 x 4 = 12, 1 + 2 = 3 -> 3의 배수
  • 5 진수 : 3 x 4 = 22, 2 + 2 = 4 -> 3의 배수가 아님

base 진법이 주어졌을 때 이러한 성질을 가진 수를 오름차순으로 모두 리턴하세요 (다만 0과 1은 제외합니다).
어떤 수가 이러한 성질을 가지는지 알고자 모든 숫자의 곱을 고려할 필요는 없습니다.
만약 4자리 미만의 곱으로 성립되면 더 큰 자리에서도 성립된다 할 수 있습니다. 예를 들어 10 진수에서는 999 보다 큰 숫자를 고려하지 않아도 됩니다.

예시
0)
base = 10
returns : {3, 9}

1)
base = 3
returns : {2}

2)
base = 9
returns : {2, 4, 8}

3)
base = 26
returns : {5, 2}

4)
base = 30
returns {29}

회문 시즌 2 : 가장 짧은 회문 길이 구하기

존과 김도균님은 대학에서 문자열 이론을 공부하고 있습니다. 김도균님은 회문을 아주 좋아합니다. 회문은 앞에부터 읽으나, 뒤에서부터 읽으나 같은 단어를 말합니다. 존은 김도균님을 임의의 문자열로 회문을 만들어 김도균님을 깜짝 놀래켜주고 싶습니다. 이때 존은 문자열 뒤에 0 이상의 숫자를 추가해 회문을 생성하려고 합니다. 존이 생성할 수 있는 가장 짧은 회문의 길이를 리턴하세요.

함수정의
find(inputString)

예시 데이터와 출력 데이터
(1) inputString = 'abab'
Returns : 5

(2) inputString = 'abacaba'
Returns : 7

(3) inputString = 'qwerty'
Returns : 11

(4) inputString = 'abdfhdyrbdbsdfghjkllkjhgfds'
Returns : 38

회문 만들기

Palindrome(이하 회문)은 앞/뒤 어느쪽으로 읽어도 같은 말이 되는 어구를 의미한다.
예) 191, 4325234, 123321, eye

어떤 수를 받아서 그 수를 뒤집은(reverse) 다음 원래의 수에 더하여 나온 값이 회문이 될 때까지, 뒤집은 수 더하기를 반복하여 회문을 찾는 프로그램을 작성하라.

예) 입력값 195인 경우

195 + 591 = 786
786 + 687 = 1473
1473 + 3741 = 5214
5214 + 4125 = 9339
출력 : 195 4 9339
참고
회문을 찾을 수 없는 수도 있다.
예) 아직 증명되지는 않았지만 196은 회문을 찾을 수 없는 수이다.
뒤집어 더하는 것을 100번 해도 회문을 찾을 수 없는 경우는 회문이 없다고 가정한다.
예)
195 4 9339
196 is not palindrome

가장 얇은 지갑 만들기

[문제]
1만원, 7만원, 11만원, 17만원권 지폐가 있다. 원하는 액수를 입력하면, 가장 얇은 지갑을 만들 수
있도록, 지폐의 갯수를 최소화 한 구성을 보여주는 프로그램을 작성하시오.

[예시]
입력값 150000 인 경우 가장 좋은 구성은 7만원 2장, 1만원 1장으로 총 3장이다.

[입/출력]
입력 : 프로그램의 첫번째 인자로 숫자를 받는다.
예) 입력값에 오류는 없다고 가정한다. 즉, 135000원 같이 구성 불가능한 입력값은 없다.
별도로 오류 처리를 할 필요 없음
출력 :
예) 1만원 X장, 7만원 X장, 11만원 X장, 17만원 X장

즐거운 파티

조소연씨는 다재다능한 사람입니다. 그래서 그에게는 친구가 많습니다. 하지만 불행하게도 그의 친구들은 다재다능하지 않습니다. 각각의 친구는 2가지 주제에만 관심이 있고 다른 주제로 이야기하는 것을 싫어합니다. 그래서 파티를 개최할 때마다 모두가 즐겁게 파티를 보내려면 어떤 친구를 초대할지가 큰 문제입니다. 조소연씨는 그 동안의 경험으로 초대된 친구 모두가 공통의 흥미 있는 화제가 있을 때 파티를 즐긴다는 것을 알았습니다.

문자열 배열 first, second가 주어집니다. 조소연씨의 index 번째 친구가 흥미 있는 화제는 first[index] 와 second[index] 입니다. 즐거운 파티가 되려면 초대할 수 있는 친구는 최대 몇 명인지 리턴하세요.

정의 : 클래스와 함수 정의
Python : InterestingParty
Method : bestInvitation(first, second)

제약조건
first : 1 부터 50개의 요소를 갖는 배열입니다.
second : first 와 같은 크기의 배열입니다.
first, second 공통 : 각 요소는 1~5개의 문자이며, 각 문자는 영어 소문자입니다. index 번째 요소 first[index] 와 second[index] 의 내용은 다릅니다.

입력 / 출력 데이터
[1]
first = ['fishing', 'gardening', 'swimming', 'fishing']
second = ['hunting', 'fishing', 'fishing', 'biting']
return : 4

[2]
first = ['variety', 'diversity', 'loquacity', 'courtesy']
second = ['talking', 'speaking', 'discussion', 'meeting']
return : 1

[3]
first = ['snakes', 'programming', 'cobra', 'monty']
second = ['python', 'python', 'anaconda', 'python']
return : 3

[4]
first = ['t', 'o', 'p', 'c', 'o', 'd', 'e', 'r', 's', 'i', 'n', 'g', 'l', 'e', 'r', 'o', 'u', 'n', 'd', 'm', 'a', 't', 'c', 'h', 'f', 'o', 'u', 'r', 'n', 'i']
second = ['n', 'e', 'f', 'o', 'u', 'r', 'j', 'a', 'n', 'u', 'a', 'r', 'y', 't', 'w', 'e', 'n', 't', 'y', 't', 'w', 'o', 's', 'a', 't', 'u', 'r', 'd', 'a', 'y']
return : 6

미로 만드는 사람

최근 미로를 만드는 장인인 마이크는 마당에 거대한 미로를 만들었습니다.
미로에 있는 i 번째 j번째 열을 나무가 있어서 지나갈 수 없는 경우 'X'로, 지나갈 수 없는 경우 '.' 으로 표시했습니다. 마이크는 미로를 잘 빠져나가는 친구 짐에게 미로를 풀 것을 부탁했습니다. 짐은 startRow 행의 startCol 열에서 미로를 시작합니다.

일반적인 미로 탈출 방법과 달리 짐은 미로를 단순하게 걷는 것이 아니라 뛰어넘어 다닙니다. 짐이 이동할 수 있는 형태는 moveRow 와 moveCol 에 기록되어 있습니다. i 번째 요소는 짐이 이동할 수 있는 움직임입니다. 짐은 현재 위치에서 moveRow[i] 행과 moveCol[i] 열 만큼 이동할 수 있습니다. 예를 들어 moveRow = {1, 0, -1} 와 moveCol = {3, -2, 5} 라면 짐은 (1, 3), (0, -2), (-1, 5) 형태로 이동할 수 있습니다. (그러나 짐은 미로 밖으로 나갈 수 없으며 나무로 이동할 수도 없습니다.)

마이크는 짐이 미로에서 나오지 못하게 하고 싶습니다.마이크는 미로의 어떤 '.' 위치에나 출구를 놓을 수 있습니다. 만약 미로에서 나오지 못하게 할 수 없다면 가능한 짐의 이동 거리가 길어지게 하려고 합니다. 짐은 미로에서 항상 최단 경로로 탈출한다고 할 때 짐이 미로에서 벗어날 수 있는 최대 이동 횟수를 리턴하세요. 미로를 빠져나올 수 없는 경우에는 -1을 리턴해주세요.

클래스와 함수 정의

class : MazeMaker
function : def longestPath(maze, startRow, startCol, moveRow, moveCol)

예시

(0)
maze = {
"...",
"...",
"..."
}
startRow = 0
startCol = 1
moveRow = {1, 0, -1, 0}
moveCol = {0, 1, 0, -1}
return = 3

(1)
maze = {
"...",
"...",
"..."
}
startRow = 0
startCol = 1
moveRow = {1, 0, -1, 0, 1, 1, -1, -1}
moveCol = {0, 1, 0, -1, 1, -1, 1, -1}
return = 2

(2)
maze ={
"X.X",
"...",
"XXX",
"X.X"
}
startRow = 0
startCol = 1
moveRow = {1, 0, -1 ,0}
moveCol = {0, 1, 0, -1}
return = -1

(3)
maze = {
".......",
"X.X.X.X..",
"....X..",
"X....X.",
"......."}
startRow = 5
startCol = 0
moveRow = {1, 0, -1, 0, -2 , 1}
moveCol = {0, -1, 0, 1, 3, 0}
return = 7

(4)
maze = {
"......."
}
startRow = 0
startCol = 0
moveRow = {1, 0, 1, 0, 1, 0}
moveCol = {0, 1, 0, 1, 0, 1}
return = 6

(5)
maze = {
"..X.X.X.X.X.X."
}
startRow = 0
startCol = 0
moveRow = {2, 0, -2, 0}
moveCol = {0, 2, 0, -2}
return = -1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.