본문 바로가기

프로그래밍/코드분석

(25)
[파이썬] level3 시저암호 (level3)시저암호 문제 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. A를 3만큼 밀면 D가 되고 z를 1만큼 밀면 a가 됩니다. 공백은 수정하지 않습니다. 보낼 문자열 s와 얼마나 밀지 알려주는 n을 입력받아 암호문을 만드는 ceasar 함수를 완성해 보세요. “a B z”,4를 입력받았다면 “e F d”를 리턴합니다. 나의 접근법 이상하게 쉽게 풀릴 것 같았는데, 하루정도 걸려서 풀었다. 가장 직관적으로 떠오른 생각은 아스키코드(ASCII) 코드를 활용하자는 것이다. 아스키코드가 뭔지 잘 모른다면, 쑥쓰러운 나의 블로그 포스팅 아스키코드와 유니코드의 이해 을 소개한다. 문제를 풀 때 가장 먼저 고려했던 것은 공백을 반영해야 한다는 것..
[파이썬] level3 야근지수 rect 문제 회사원인 수민이는 많은 일이 쌓여 있습니다. 수민이는 야근을 최소화하기 위해 남은 일의 작업량을 숫자로 메기고, 일에 대한 야근 지수를 줄이기로 결정했습니다. 야근 지수는 남은 일의 작업량을 제곱하여 더한 값을 의미합니다. 수민이는 1시간 동안 남은 일 중 하나를 골라 작업량 1만큼 처리할 수 있습니다. 수민이의 퇴근까지 남은 N 시간과 각 일에 대한 작업량이 있을 때, noOvertime 함수를 제작하여 수민이의 야근 지수를 최소화 한 결과를 출력해 주세요. 예를 들어, N=4 일 때, 남은 일의 작업량이 [4, 3, 3] 이라면 야근 지수를 최소화하기 위해 일을 한 결과는 [2, 2, 2]가 되고 야근 지수는 22 + 22 + 22 = 12가 되어 12를 반환해 줍니다. 접근 방법 수학..
[파이썬] 사각형의 나머지 한 좌표값 반환하기 rect 문제 직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 반환하는 solution 함수를 완성해 주세요. 단, 직사각형의 각 변은 x축, 혹은 y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다. 입출력 예 #1 주어진 점의 좌표가 [[1, 4], [3, 4], [3, 10]] 일때, [1, 10]에 점이 위치하면 직사각형이 됩니다. 입출력 예 #2 주어진 점의 좌표가 [[1, 1], [2, 2], [1, 2]] 일때, [2, 1]에 점이 위치하면 직사각형이 됩니다. 문제 출처 SK 주식회사 C&C “Code Genius 2017” 데모테스트 문제 (https://programmers.co.kr/tryouts/3/challenge..
[파이썬] 다음 큰 숫자(next big number) 다음큰숫자 문제 (http://tryhelloworld.co.kr/challenge_codes/173) 어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다. N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다. 1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다. 예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다. N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요. 나의 풀이 def nextBigNumber(n): ''' 정수형태의 파라미터 값(n)을 받는다. (1) make_nu..
[파이썬] 팰린드롬(palindrome) 문제 회문(回文) 또는 팰린드롬(palindrome)은 거꾸로 읽어도 제대로 읽는 것과 같은 문장이나 낱말이다. 보통 낱말 사이에 있는 띄어쓰기나 문장 부호는 무시한다. 예를 들어 내 이름은 거꾸로 해도 이효리 이런 예시가 있다. '구로구', '부익부' 이런 글자도 모두 팰린드롬에 해당한다. 1. print(is_palindrome("racecar")) 2. print(is_palindrome("stars")) 3. print(is_palindrome("토마토")) 4. print(is_palindrome("kayak")) 5. print(is_palindrome("hello")) 1. True 2. False3. True4. True5. False 가 출력되어야 한다. 음.. 착안점은 문자열을 리스트로 만들..
소수(Prime Number) 판단 문제 난 정말 JAVA를 공부한 적이 없다구요(윤성우 저, 오렌지미디어)에서 발췌한 문제(160p 문제 6-2) 전달된 값이 소수(prime number)인지 아닌지를 판단하여, 소수인 경우 true를, 소수가 아닌 경우 false를 반환하는 메서드를 정의하고, 이를 이용해서 1이상 100이하의 소수를 전부할 수 있도록 main 메서드를 정의하자. [1] main 메서드와 isPrime 메서드를 구분해서 생각할 필요가 있다. 이 문제의 포인트는 boolean (true, false)으로만 전달되는 값을 온전한 숫자로 출력할 수 어야 한다. [2] isPrime의 반환값을 보면 boolean이다. (true 또는 false만 반환) 따라서 main 메서드에서는 소수에 해당하는 값(true)만 걸러내는 소쿠리라고..
continue와 break문의 활용 난 정말 JAVA를 공부한 적이 없다구요(윤성우 저, 오렌지미디어)에서 발췌한 문제(136p 문제 5-6) 쉬운 문제이지만(?) 한 시간 이상 고민한 문제이기 때문에 코드분석란에 넣었다. 자연수 1부터 시작해서 모든 홀수와 3의 배수인 짝수를 더해 나간다. 그리고 그 합이 언제 (몇을 더했을 때) 1000을 넘어서는지, 그리고 1000을 넘어선 값은 얼마가 되는지 계산하여 출력하라. 단, 프로그램 내에서 반복문을 필요로 한다면 반드시 while문을 무한루프로 구성해야 한다. public class test { public static void main(String[] args){ int sum=0; while(true){ for(int num=1; sum1000이 되는 순간에 문장을 출력한다.
[KATA] Triangular Treasure(삼각수) 1. triangular numbers 가 삼각형의 갯수를 의미하는 건가? 라고 생각했는데 삼각수라고 해서 삼각형 처럼 원 모양을 쌓아가다보면 공식처럼 놓여진 원의 개수를 구할 수 있게 된다. 2. 나는 저렇게 별 모양의 순서대로 표시하면 되는 줄 알았다. 그런데 그게 아니라 괄호안에 숫자만 출력하면 된다. ( ※ 단, 범위값을 벗어났을 경우 0을 출력해야 한다. ) 코드는 이렇게 간단하게 주어진다. 3. 정답은 사실 되게 간단하다return (n 4) System.out.println(n + "nd " + "(" + n*(n+1)/2 + ")"); } } } for(int i=n; i>0; i--){ System.out.print("*"); for(int j=0; j