본문바로가기
자유게시판
수학을 주제로 떠들어 보세요!
[잡담] 백준 1000번을 1000줄에 걸쳐서 풀어보자!
집돌이 페렐만 2021.08.27 08:04 조회 389

백준을 아십니까?

네 맞습니다, 아무도 대답 안하셨지만 안다고 치고 넘어가보죠.

백준은 프로그래밍 문제를 온라인으로 풀고 채점받는 곳입니다.

각종 대회를 비롯한 다양한 알고리즘 문제가 모여있는 곳이죠

 

여기서 가장 기본적인 문제는 1000번이 아닐까 싶습니다.

정직하게 두 정수를 입력받아 그 합을 출력하는 프로그램이죠.

 

모든 언어가 다 짧은 코드로 기능을 만들 수 있습니다.

 

 

1
2
a, b = map(int, input().split())
print(a+b)
cs

파이썬

 

 

1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    cout << a+<< endl;
    return 0;
}
cs

c++17

 

그 유명한 골프스크립트는 ~+ 두 글자로 가능합니다.

 

 

숏코딩 상위권도 다 골프스크립트군요

 

 

 

좋습니다. 이제 코드를 길게 짜보죠.

코드를 길게 짜려면 저급언어를 쓰는 것이 좋습니다.

여기서 저급언어란 질이 낮은게 아니라 컴퓨터가 이해하기 쉬운 언어죠.

어셈블리어가 떠오르는군요! 바로 짜보죠

 

어셈블리 64bit는 

 

 

section .data     input: db "%d %d",0     output: db "%d",10,0

    a: times 4 db 0     b: times 4 db 0

section .text     global main     extern scanf     extern printf

main:     push rbp

    mov rdi, input     lea rsi, [a]     lea rdx, [b]     mov rax, 0     call scanf

    mov rax, [a]     mov rbx, [b]     add rax, rbx

    mov rdi, output     mov rsi, rax     mov rax, 0     call printf

    pop rbp     mov rax,0     ret

 

이렇습니다. 좀 길지만 아직도 부족하군요.

그럼 어떻게 할까요? c에 어셈블리를 주입하는 겁니다!

 

__asm { mov eax, edx add eax, 2 }

이걸 써볼까요?

nop 중간에 끼워넣고... 거기에 스택 할당 죄다 힙으로 돌리면 용량도 커지겠군요

최후의 카드로 모든 라이브러리를 정적으로 불러오는 겁니다! 와우!

(이 과정에는 tmvkr****님의 도움을 받았습니다.)

 

 

이런...아직도 부족하군요

하지만 이럴 때 방법이 있죠.

 

아희를 쓰는겁니다!

 

핫하! 성공!

 

 

코드는 이모양입니다.

와우! 이걸로 1000줄 미션을 달성했습니다.

폭발적인 반응이군요.

감사합니다!

 

폴리매스 만세에에

  •  
    잡담 Lv.7 2021.08.27 08:22

    폴리매스 만세에에

    댓글 작성하기 좋아요0 댓글수0
  •  
    RTAI Lv.7 2021.08.27 08:51

    만세에ㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔㅔ

    댓글 작성하기 좋아요0 댓글수0
  •  
    RTAI Lv.7 2021.08.27 08:51

    55555555555555555555555555555555555555555555555555555555

    댓글 작성하기 좋아요0 댓글수0
  •  
    PMPI Lv.7 2021.08.27 19:51

    대한민국 만세에에에엑.....

    댓글 작성하기 좋아요0 댓글수0
  • 폴리매스 문제는 과학기술진흥기금 및 복권기금의 재원으로 운영되고, 과학기술정보통신부와 한국과학창의재단의 지원을 받아 수행된 성과물로 우리나라의 과학기술 발전과 사회적 가치 증진에 기여하고 있습니다.

  • ☎문의 02-6749-3911