[print('*' * i) for i in range(1, int(input())+1)]

문제 1.(구구단, 2739번)

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

a = int(input())
for N in range(1,10):
    print(a, '*', N, '=', a*N)

문제 2.(A+B -3, 10950번)

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

T = int(input())

for _ in range(T):
    a,b = map(int,input().split())
    print(a+b)

for 과 in 사이에 변수를 넣어서 사용할 수 있는데, 이번 문제는 테스트 케이스의 개수 T만큼 반복하는 것이 중요하고 range함수로 생성된 숫자 요소를 변수로 선언해 사용할 필요는 없다. 이런 경우 for과 in 사이에 언더바(_)로 표현하는 것이 가능하다. 

 

문제 3. (합, 8393번)

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

 

풀이 1.

n = int(input())

total = 0
for i in range(1,n+1):
    total += i
print(total)

핵심 - 종료 값의 경우 해당 값을 포함하지 않기 때문에 n+1을 해준다.

 

풀이 2. Comprehension 표현식

print(sum(range(1, int(input())+1)))

 

 

문제 4. (빠른 A+B, 15552번)

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다. C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.

Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.

또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.

자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.

이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.

 

풀이 1.

import sys  # sys모듈 읽어들이기

t = int(sys.stdin.readline())

for _ in range(t):
    a,b = map(int, sys.stdin.readline().split())
    print(a+b)

- 핵심 : input() vs sys.stdub.readline()

input() sys.stdin.readline()
- input은 개행 문자를 받지 않는다.

(The input takes input from the user but does not read escape character)

- 입력을 받기 전에 프롬포트를 띄운다.
(It has a prompt that represents the default value before the user input)
- readline은 개행문자의 입력도 받는다.

(The readline() also takes input from the user but also reads the escape character)

- parameter로 사이즈를 받아서 읽을 byte수를 지정할 수 있다.
(음수가 아닌 수)

(Readline has a parameter named size, Which is a non-negative number, it actually defines the bytes to be read)
import sys

# 여러 줄을 입력 받을 때
words = [sys.stdin.readline() for i in range(n)]

# 여러 문자를 int형으로 바로 저장하고 싶을 때
a, b = map(int, sys.stdin.readline().split())

# 여러 문자를 int형을 담은 list로 저장하고 싶을 때
word_list = list(map(int, sys.stdin.readline().split()))

풀이 2.

for l in[*open(0)][1:]:print(sum(map(int,l.split())))

- 핵심 : 백준에 올라와 있는 가장 짧은 코드이다. 코드에 대한 해석은 아직 잘 모르겠다.

 

문제 5. (N찍기, 2741번)

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

 

풀이 1.

n = int(input())

for i in range(n):
    print(i+1)

풀이 2.

n = int(input())

for i in range(1, n+1):  # 1부터 n까지
    print(i)

풀이 3.

comprehension 표현식

[print(i) for i in range(1, int(input())+1)]

문제 6. (기찍 N, 2742번)

풀이 1.

n = int(input())

for i in range(n, 0,-1):
    print(i)

핵심 : -1은 역순을 의미한다. 

range 함수의 특징 중에는 stop 값은 숫자 범위에 폼함하지 않는다.

그래서 두번 째 숫자가 0이 되어야 한다.

 

풀이2.

n = int(input())
for i in range(1, n+1)[::-1]:
    print(i)

풀이 3. 

comprehension 코드

[print(i) for i in range(1, int(input())+1)[::-1]]

 

 

문제 7. (A+B - 7, 11021번)

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

T = int(input())

for i in range(1,T+1):
    a,b = map(int, input().split())
    print("Case #"+str(i)+':',a+b)

문제 8. (A+B - 8, 11022번)

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력

각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.

T = int(input())

for i in range(1,T+1):
    a,b = map(int, input().split())
    0 < a and 10 > b
    c=a+b
    
    print("Case #"+str(i)+':',a,'+',b,'=',c)

- 핵심 : 띄어쓰기 부분은 (,)를 이용해서 한칸씩 띄어서 출력하였다. 여기서 +와 ,의 기능을 알 필요가 있는데 아래의 표에 간단하게 정리를 해보겠다.

+(plus) ,(comma)
- print 함수에서 어떤 값들을 이을 때 사용

- 공백이 추가되지 않음

>>> print("안녕" + "하세요")
안녕하세요

- +(덧셈)은 문자열들만 연결할 수 있다.
>>> month = 9
>>> print(month, "월")
Type Error
- print 함수에서 어떤 값들을 이을 때 사용

- 공백이 추가됨

>>>print("안녕"+"하세요")
안녕 하세요

- ,(콤마)는 모든 자료형의 값을 연결할 수 있다.
>>> month = 9
>>> print(month, "월")
9월

문제 9. (별찍기 , 2438번)

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

 

풀이 1. 

n = int(input())
for i in range(1,n+1):
    print("*" * i)

- 핵심 : print 함수 내에서 *는 문자열을 반복하는 연산자이다.

 

풀이 2. Comprehension 표현식

 

[print('*' * i) for i in range(1, int(input())+1)]

문제 10. (별찍기2, 2439번)

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

n = int(input())

for i in range(1,n+1):
    print(' '*(n-i)+'*'*i)

- 핵심 :  ' ' 여백의 빈칸을 *(반복) n-1만큼 반복하고 옆에는 이어서 +(문자열이어줌) '*'를 i만큼 출력한다.

 

문제 11. (X보다 작은 수, 10871번)

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

N, X = map(int, input().split())

A = list(map(int,input().split()))

if len(A) == N:
    for i in A:
        if i < X:
            print(i, end = ' ')
        

블록체인과 비트코인에 대해서 아무것도 모르고 이 글을 보신다면 이해하기 어려울 수 있습니다.

기초적인 지식이 바탕이 되어있어야합니다.

 

Step 1 - 지갑을 획득하라. (Get a Wallet)

coinomi라는 사이트로 가서 맥용 Wallet을 다운 받습니다.

비밀번호를 설정하고 채굴할 코인을 설정하면 됩니다. 

Step 2 - 채굴기를 구하세요. (Get a Miner) 

https://github.com/xmrig/xmrig/releases

 

Releases · xmrig/xmrig

RandomX, CryptoNight, AstroBWT and Argon2 CPU/GPU miner - xmrig/xmrig

github.com

깃허브 링크로가서 Miner를 획득하세요.

스크롤을 내려서 확인해보면 

이런 화면을 볼 수 있습니다. 저 같은 경우 맥북2020 인텔을 사용중이어서 xmrig-6.12.1-macos-x64.tag.gz를 사용중입니다. M1칩을 사용 중이라면 xmrig-6.12.1-macos-arm64.tag.gz를 다운 받으세요.

 

Step 3 - 풀을 찾으세요. (Find a Pool)

저 같은 경우에는 unMineable.com을 이용합니다. 

홈페이지를 가면 이런 화면이 뜨는데요. 여기서 Dogecoin 아이콘을 눌러줍니다.

도지코인 아이콘을 누르면 이런 화면으로 넘어가는데요. 

뭔가 복잡해보이지만 당황해할 필요 없습니다. 

계속해서 Keep Going~!

 

Step 4 - Configure XMRIG

아까 다운 받은 xmrig-6.12.1-macos-x64.tag.gz 파일을 활용할 시간입니다.

우리는 config.json 이라는 파일을 수정할 것입니다.

pool 아래에 있는 "algo", "url", "user" 있는 부분만을 수정해 주면 됩니다.

"algo": "rx/0"

"url": "rx.unmineable.com:3333"

"user": "YourAddress.YourWorkerName"

WorkerName은 아무거나 하시면 되구요. ex) 저처럼 MBA 이런 식

YourAddress에는 

Your Address에는 Recieve 버튼 눌러서 나오는 긴문장을 복사 붙여넣기하면 됩니다. 

 

Step 5 - 채굴을 시작하십시오. (Start Mining) 

이제 아까 다운 받은 xmrig를 실행시킵니다.

채굴이 시작됩니다.

위의 화면이 채굴이 진행되고 있는 모습입니다.

 

**추천인에 o9jy-92jc 작성해서 써주시면 채굴 수수료 fee가 1%인데 0.25% 감소가 됩니다..!!

 

저 같은 경우에는 900~1000h의 속도로 채굴을 하는데요.

1000h이면 한달에 6.3도지 정도 획득할 수 있군요...!! 와우.. 전기세가 더 나올 것이에요..!!!

맥북 배터리 수명 닳는 속도가 더 빠를 것 같습니다.

감가상각 되는 소리가 여기까지 들리는데요.

저 같은 경우에는 코딩을 공부하고 있고, 이쪽 분야에 관심이 많아서 해봤지만

Business로 생각한다면 이 방식말고 더 좋은 방식을 찾아봐야 할 것 같습니다.

혹시 더 좋은 방법들을 알고 있다면 댓글로 공유해주시면 감사하겠습니다.

 

1. 해시파워란?

해시파워(hash power)는 블록체인 네트워크에서 채굴자들이 가지고 있는 채굴 역량이다. 수학 문제를 푸는 속도를 의미하기도 하는데 해시파워가 높을수록 초당 계산할 수 있는 문제가 많아지므로 더 빠르게 채굴을 할 수 있다.

 

2. 개요

암호화폐를 얻기 위해서는 채굴을 통해 블록을 생성해야 한다. 이 과정에서 어려운 수학문제를 풀어야 하는데, 이때 해시 알고리즘을 이용해 암호화된 문제를 풀 수 있는 경우의 수를 찾는다. 비트코인의 경우 10분에 한 개의 블록이 생성될 수 있도록 알고리즘이 설계되어 비트코인을 얻기 위해서는 10분 안에 한 문제를 풀어야 한다.

해시파워는 이 수학문제를 풀 수 있는 계산 능력, 즉 얼마나 빠른 시간 안에 문제를 풀어낼 수 있는가를 알 수 있는 기준이다. 해시파워는 채굴자의 역량마다 다르며 채굴 장비에 따라 차이가 발생한다. 전용 채굴기를 가진 사람이 일반 가정용 컴퓨터를 가진 사람보다 더 많은 채굴을 할 수 있는 이유가 바로 해시파워의 차이 때문이다. 따라서 개인들은 다수를 상대하기에는 약한 해시파워 때문에 마이닝풀을 결성하여 해시파워를 높여 경쟁에서 우위를 한다.

 

3. 단위 

해시파워의 단위는 H/s, MH/s, GH/s, TH/s로 네 가지가 있다. H/s는 초당 계산할 수 있는 채굴 속도, MH/s는 초당 계산 할 수 있는 메가 해시 속도, GH/s는 초당 계산 할 수 있는 기가 해시 속도, TH/s는 초당 계산 할 수 있는 테라 해시 속도를 의미한다.

  • 1,000H/s = 1KH/s : 1초에 1,000번 계산
  • 1,000KH/s = 1MH/s : 1초에 1,000,000번 계산
  • 1,000MH/s = 1GH/s : 1초에 1,000,000,000번 계산
  • 1,000GH/s = 1TH/s : 1초에 1,000,000,000,000번 계산

4. 사례

비트메인은 한때 채굴기 시장 점유율이 약 75%에 달했던 채굴기 생산 기업이다. 특히 비트메인의 채굴용 컴퓨터 엔트마이너(AntMiner) 시리즈는 채굴기 업계에서 좋은 성능을 가지고 있는 것으로 유명하다. 비트메인은 독점적인 해시파워를 가지고 있었는데, 실제로 2018년 06월 말에는 비트메인이 소유하고 있는 비티씨닷컴 엔트풀의 해시파워 합계가 43.4%를 넘어섰다.

블록체인은 하나의 중앙기관이 네트워크를 관리하지 않는다. 때문에 하나의 블록을 생성하기 위해 여러 네트워크 참가자들에게 동의를 받아야 한다. 대표적으로 비트코인은 과반이 넘는 참여자의 합의를 통해 블록을 생성하는 방식인 작업증명(Proof of Work) 합의 알고리즘을 채택하고 있다. 하지만 이때 순수하지 못한 세력이 비트코인 해시파워의 51%를 확보할 경우 블록체인의 거래 장부를 위조할 가능성이 생긴다. 이것이 바로 51%의 공격이다.

실제로 한때 비트메인이 해시파워 51% 이상을 차지하는 게 아니냐는 우려의 목소리가 높아졌는데, 이는 현실화되기 어렵다는 게 다수설이다. 과반 이상의 비트코인 해시파워를 가진 채굴자가 51% 공격을 시도하여 거래 장부를 조작하려고 했다면 이 사실은 모든 참여자에게 알려지고 불안한 투자자들은 비트코인을 팔려고 나설 것이다. 이렇게 줄매도가 이어진다면 비트코인의 가치는 하락하여 51% 이상의 해시파워를 가지고 있는 채굴자는 비트코인 채굴을 통한 보상을 얻기는커녕 손해를 입게 되기 때문이다.

 

5. 채굴기 및 속도 비교 

현재 핫한 rtx 3080 100mh의 속도로 채굴을 한다. 다른 사람의 글을 보니 0.133이더리움을 채굴했다고 한다. (24시간 돌린 것이 아니니깐 더 채굴할 수 있었을 것이다.) 하여간 한달 간 돌려서 순수익이 30~40 될 것이라고 한다.

나의 맥북은 1000h로 도지코인을 채굴을 하는데 약 한달에 6~7 도지코인이다. 한달에 원화로 계산하면 4000~5000원인 셈인데.. 골 때린다..ㅋㅋㅋㅋㅋㅋ

즉 나의 맥북의 채굴속도와 rtx-3080의 채굴속도의 차이는 1,000배이다. 나의 맥북은 random-x(CPU)로 채굴하는 방식이고 rtx-3080은 (GPU)로 채굴하는 방식이다. CPU와 GPU를 비교하는 것이므로 정확한 비교방식이라고 말할 순 없지만 하여간 채굴속도는 진짜 1,000배 차이다....

rtx 2080 = 30~40mh

rtx 3080 = 97mh

my2020 macbook(intel) = 1000h (CPU)

my Desktop HP computer(Old computer) = 300h 

 

추후 내용 수정 및 추가 예정.

 

이상!

 

+ Recent posts