2019년 11월 17일 일요일

[Python 3] HackerRank Forming a Magic Square

Test url: https://www.hackerrank.com/challenges/magic-square-forming/problem



My Answer:


#!/bin/python3

import math
import os
import random
import re
import sys

def reverseTopBottom(mtx):
result = [[0]*3 for i in range(3)]

for i in range(3):
for j in range(3):
result[i][j] = mtx[2-i][j]
return result

def reverseLeftRight(mtx):
result = [[0]*3 for i in range(3)]

for i in range(3):
for j in range(3):
result[i][2-j] = mtx[i][j]

return result

def rotate90(mtx):
result = [[0]*3 for i in range(3)]

result[0][0] = mtx[2][0]
result[0][1] = mtx[1][0]
result[0][2] = mtx[0][0]
result[1][0] = mtx[2][1]
result[1][1] = mtx[1][1]
result[1][2] = mtx[0][1]
result[2][0] = mtx[2][2]
result[2][1] = mtx[1][2]
result[2][2] = mtx[0][2]

return result

def calculate(s, mtx):
result = 0
for i in range(3):
for j in range(3):
result += abs(mtx[i][j] - s[i][j])
return result

# Complete the formingMagicSquare function below.
def formingMagicSquare(s):
result = 0
minResult = 100
mtx = [[4,9,2],[3,5,7],[8,1,6]]
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = reverseLeftRight(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

mtx = rotate90(mtx)
result = calculate(s, mtx)
if(minResult > result):
minResult = result

return minResult


if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

s = []

for _ in range(3):
s.append(list(map(int, input().rstrip().split())))

result = formingMagicSquare(s)

fptr.write(str(result) + '\n')

fptr.close()

[Python 3] HackerRank Max Min

Test url: https://www.hackerrank.com/challenges/angry-children/problem


My Answer:

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the maxMin function below.
def maxMin(k, arr):
cal = 0
min = 1000000000
arr.sort()

for i in range(len(arr)-k+1):
cal = arr[i+k-1] - arr[i]
if(cal < min):
min = cal
return min

if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

n = int(input())

k = int(input())

arr = []

for _ in range(n):
arr_item = int(input())
arr.append(arr_item)

result = maxMin(k, arr)

fptr.write(str(result) + '\n')

fptr.close()

[Python 3] HackerRank Non-Divisible Subset

Test url: https://www.hackerrank.com/challenges/non-divisible-subset/problem


My Answer:



#!/bin/python3

import math
import os
import random
import re
import sys

#
# Complete the 'nonDivisibleSubset' function below.
#
# The function is expected to return an INTEGER.
# The function accepts following parameters:
# 1. INTEGER k
# 2. INTEGER_ARRAY s
#

def nonDivisibleSubset(k, s):
# Write your code here
result = 0
arr = [0] * k
half_idx = k // 2 + k % 2

for i in range(len(s)):
seed = s[i] % k
arr[seed] += 1

for i in range(0, half_idx):
if i == 0:
if(arr[i] > 0):
result += 1
continue

if arr[i] > arr[k-i]:
result += arr[i]
else:
result += arr[k-i]

if k % 2 == 0 and arr[half_idx] > 0:
result += 1

return result


if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

first_multiple_input = input().rstrip().split()

n = int(first_multiple_input[0])

k = int(first_multiple_input[1])

s = list(map(int, input().rstrip().split()))

result = nonDivisibleSubset(k, s)

fptr.write(str(result) + '\n')

fptr.close()

2019년 11월 15일 금요일

[Python 3] HackerRank Encryption

Test URL: https://www.hackerrank.com/challenges/encryption/problem



My Answer:


#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the encryption function below.
def encryption(s):
result = ''
row = 0
col = 0

myStr = s.replace(' ','')
str_len = len(myStr)
str_len_sqrt = math.sqrt(str_len)

if(int(str_len_sqrt) == str_len_sqrt):
row = col = int(str_len_sqrt)
else:
row = int(str_len_sqrt)
col = row + 1

for i in range(col):
for j in range(i,str_len,col):
if(myStr[j]):
result += myStr[j]
result += ' '

return result


if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

s = input()

result = encryption(s)

fptr.write(result) # removed (+ '\n')

fptr.close()

2019년 11월 5일 화요일

Clojure Study) 개발 환경 세팅

1. VSCode 설치
사용 버전: VSCodeUserSetup-x64-1.39.2

2. Java 설치
JDK로 설치할 것. (JRE X)

3. leiningen-installer-1.0 설치
url: http://leiningen-win-installer.djpowell.net


4.Calva: Clojure & ClojureScript 설치
(VSCode의 Extension 메뉴에서 검색)


5. 윈도우에서 Clojure REPL을 검색하여 실행

6. REPL 을 켜둔채로 유지하고, REPL에 나온 포트 번호를 기억

7. VSCode 를 실행한 뒤, ctrl + alt + c 를 누르고, ctrl + alt + j를 입력.
"There was no valid project configuration found in the workspace ... " 라는 에러가 뜰 텐데.
창 가장 하단에 파란색 막대가 생겨있을 텐데, 거기서 nREPL 버튼을 누를 것


그럼 위 쪽 커맨드 입력창에서 "Connect to a running REPL server, not in your project" 선택, 이어서 Leiningen 선택.

그 뒤 나오는 화면에서 6번 과정에서 띄웠던 포트번호를 입력하면, VSCode에서 REPL 사용 가능

Python Study) 개발 환경 세팅

1. VScode 설치
 사용 버전: VSCodeUserSetup-x64-1.39.2

2. VSCode 실행 후 Extension 탭 클릭

3. Python 검색하여 설치

2018년 5월 31일 목요일

(번역) C에서 과학적표기법으로 int 상수를 나타내도 안전한가요?

//원문:
https://stackoverflow.com/questions/24389678/is-scientific-notation-safe-for-integer-constants-in-c

---------------------------------------------------------------------------------------------------

질문: C에서 과학적표기법으로 int 상수를 나타내도 안전한가요?

질문자: David Dombrowsky
질문 날짜: 2014-06-24

저는 큰 10의 제곱수의 상수를 과학적 표기법을 사용하는 식으로 표현했었는데요, 그래서 전 0의 숫자를 셀 필요가 없었습니다. 이렇게 말이죠.

#define DELAY_USEC 1e6

제 동료는 이건 integer가 아니기 때문에 항상 정확히 1000000의 값을 가질거라는 보장이 없어서 안전하지 않을 거라고 하더군요. 문서를 읽어봤을 땐 써도 괜찮은 것으로 보였지만, 이게 실제로도 맞는지 궁금합니다. 10의 제곱수를 약자로 안전하게 표현할 수 있는 방법이 따로 있나요? define에서 int로 변환하는 거는 안전한 방법인가요?


---------------------------------------------------------------------------------------------------

투표수: 19
답변자: Mike Seymour
답변 날짜: 2014-06-24

이론적으로는, 아닙니다. 언어에서는 소수점 값을 어떤 식으로, 그리고 정확하게 표현할 수 있는지 명시하지 않았습니다. (업데이트: C11에서는 추천하는 표현방식이 있다고 합니다. C++ 나 예전 C라면, 아닙니다)

실제로는, 꽤 큰 숫자까지 Yes입니다. 당신이 보게 될 구현들은 double에 대한 64-bit IEEE  표준을 따를 것입니다. 그건 2의 53승(대충 9x10^15) 까지의 어느 int 값이라도 정확하게  표현될 수 있습니다. 즉, 32비트의 int 형은 뭐든지 확실히 표현할 수 있다는 뜻이죠.