nyyyun2의 등록된 링크

 nyyyun2로 등록된 네이버 블로그 포스트 수는 175건입니다.

Dreamhack | basic_exploitation_001 [내부링크]

이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다. #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_flag() { system("cat /flag"); } int main(int argc, ch

Dreamhack | ssp_000 [내부링크]

이 문제는 작동하고 있는 서비스(ssp_000)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다. SSP 방어기법 - Stack Smashing Protector, memory corruption vulnerability 중 Stack Buffer Overflow vulnerability를 막기 위해 개발된 보호 기법 - 스택 버퍼와 스택 프레임 포인터 사이에 랜덤 값(Canary)을 삽입하여 함수 종료 시점에러 랜덤 값 변조 여부를 검사하여 스택이 변했는지 확인하는 방식 보호 기법 확인 먼저, checksec 명령어를 통해 환경 정보를 확인해보았다. - amd64 아키텍처, 리틀엔디안 방식 사용 - RELRO(Relocation Read-Only): 부분적으로만 R

Dreamhack | ssp_001 [내부링크]

이 문제는 작동하고 있는 서비스(ssp_001)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 SSP 방어 기법을 우회하여 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다. SSP 방어기법 - Stack Smashing Protector, memory corruption vulnerability 중 Stack Buffer Overflow vulnerability를 막기 위해 개발된 보호 기법 - 스택 버퍼와 스택 프레임 포인터 사이에 랜덤 값(Canary)을 삽입하여 함수 종료 시점에러 랜덤 값 변조 여부를 검사하여 스택이 변했는지 확인하는 방식 보호 기법 확인 먼저, checksec 명령어를 통해 환경 정보를 확인해보았다. - 32비트 인텔 아키텍처(i386), 리틀엔디안 방식 사용 - RELRO(Relocation Read-Only):

Webhacking.kr | Challenge 54 [내부링크]

Challenge 15번 문제 페이지이다. Password is 는 고정되어 있으며 ? 위치에서 flag 값이 하나씩 빠르게 나타났다가 사라진다. flag 값을 천천히 나타나게끔 해도 되지만 읽기 좋게 사라지지않게끔, 오른쪽으로 쭉 나열되게 만들어야겠다. <html> <head> <title>Challenge 54</title> </head> <body> <h1><b>Password is <font id=aview></font></b></h1> <script> function run() { if (window.ActiveXObject) { try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } } else if (window.XMLHttpRequest) { return new

Python deserialize 취약점 [내부링크]

Serialize(직렬화): 컴퓨터에서 사용하는 데이터나 객체를 일련의 바이트로 변환하는 과정 이렇게 하면 데이터를 파일에 저장하거나 네트워크를 통해 다른 컴퓨터로 보낼 수 있음음 ex) 게임의 진행 상태를 파일에 저장하거나, 인터넷을 통해 메시지를 보낼 때 사용 Deserialize(역직렬화): 직렬화된 바이트 스트림을 원래의 데이터나 객체로 다시 변환하는 과정 ex) 저장된 게임 파일을 불러와서 게임을 이전에 중단했던 상태로 복원하거나, 인터넷에서 받은 데이터를 원래의 형태로 변환할 때 사용 pickle(피클) 모듈: 파이썬 객체 구조의 직렬화와 역직렬화를 위한 바이너리 프로토콜을 구현함 pickle.dumps(): 객체 계층 구조를 직렬화 파이썬 객체를 받아서 바이트 스트림으로 변환함. 객체를 파일에 바로쓰지 않고, 객체의 바이트 표현을 메모리에 저장함 반환값은 바이트 객체이며, 이를 파일에 쓰거나 네트워크를 통해 전송할 수 있음 pickle.loads(): 데이터 스트림을 역

Dreamhack | web-deserialize-python [내부링크]

Session Login이 구현된 서비스입니다. Python(pickle)의 Deserialize 취약점을 이용해 플래그를 획득하세요. 플래그는 flag.txt 또는 FLAG 변수에 있습니다. https://blog.naver.com/nyyyun2/223317330961 Python deserialize 취약점 Serialize(직렬화): 컴퓨터에서 사용하는 데이터나 객체를 일련의 바이트로 변환하는 과정 이렇게 하면 데... blog.naver.com 문제 사이트에 들어가면 파이썬으로 쿠키를 제작하는 사이트가 나온다. Create Session을 클릭하니 name, userid, password 값을 입력하여 세션을 만들 수 있도록 되어있다. 값을 넣어 세션을 만들어보자. (Name에는 name, Userid에는 userid, Password에는 password를 입력해주었다) create 버튼을 누르고 나니 세션값이 만들어졌다. 끝이 등호로 끝나는 걸 보아 base64로 인코딩 되

Dreamhack | Addition calculator [내부링크]

덧셈 식을 입력하면 계산 결과를 출력하는 웹 서비스입니다. ./flag.txt 파일에 있는 플래그를 획득하세요. 플래그 형식은 DH{...} 입니다. 덧셈 계산을 해주는 페이지라고 한다. 이런식으로 입력하면 계산 결과값을 출력해준다. 출력값은 위와 같이 Enter the value와 덧셈 결과값, Filtered, Error로 나눠지는 것 같다. #!/usr/bin/python3 from flask import Flask, request, render_template import string import subprocess import re app = Flask(__name__) def filter(formula): w_list = list(string.ascii_lowercase + string.ascii_uppercase + string.digits) w_list.extend([" ", ".", "(", ")", "+"]) if re.search("(system)|(curl)|(

경찰이 전망하는 2024년 사이버 위협, 범죄 유형별로 살펴보니 [내부링크]

https://www.boannews.com/media/view.asp?idx=125705 경찰이 전망하는 2024년 사이버 위협, 범죄 유형별로 살펴보니 사이버 범죄 유형은 정보통신망 침해 범죄 불법콘텐츠 범죄 정보통신망 이용 범죄로 구분된다. 올해 정보통신망 침해 범죄 분야에서는 ‘사물인터넷(IoT) 공격 위협이 지속될 것’이라는 전망이 이어졌다. 일상에서 가정용 IP 카메라, 홈CCTV 등 IoT 기기 사용이 늘었고, 이를 악용한 사이버범죄 위협 역시 커지고 있다. www.boannews.com 작성 2024.01.17 사이버 범죄 유형 - 정보통신망 침해 범죄 - 불법콘텐츠 범죄 - 정보통신망 이용 범죄 1. 사물인터넷 해킹 : 정보통신망 침해 범죄 - 가정용 IP 카메라, 홈 CCTV 등의 IoT 기기 사용이 증가함에 따라 이를 악용한 범죄 역시 증가. 대표적 사례: n번방 사건, 아파트 월패드 해킹, 중국 해커에 의한 IP 카메라 영상 유포. 전망 및 대책: IoT 기기

네트워크 [내부링크]

- 노드들이 데이터를 공유할 수 있게 하는 디지털 전기통신망의 하나. - 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것. - 네트워크에서 여러 장치들은 노드 간 연결을 사용하여 서로에게 데이터를 교환함. *노드: 네트워크에 속한 컴퓨터 또는 통신 장비를 뜻함. 인터넷 문서, 그림, 영상과 같은 여러가지 데이터를 공유하도록 구성된 세상에서 가장 큰 전세계를 연결하는 네트워크. 흔히 www를 인터넷으로 착각하는 경우가 많은데 www는 인터넷을 통해 웹과 관련된 데이터를 공유하는 것. 네트워크를 크기에 따라 분류 - LAN(Local Area Network): 가까운 지역을 하나로 묶은 네트워크. 하나의 장비(스위치)에 연결되어 있는 여러 시스템이 속한 네트워크. - WAN(Wide Area Network): 멀리 있는 지역을 한데 묶은 네트워크. 가까운 지역끼리 묶은 LAN과 LAN을 다시 하나로 묶은 것. 하나 이상의 LAN으로 구성된 네트워크. - MAN(Metropolitan

네트워크 모델 [내부링크]

https://blog.naver.com/nyyyun2/223205901067 OSI 7 layer | TCP/IP 4 layer OSI 7계층: ISO(국제표준화기구)가 다양한 네트워크 간의 호환을 위해 만든 표준 네트워크 모델 IP... blog.naver.com TCP/IP 모델 1960년대 말 미국방성의 연구에서 시작되어 1980년대 초 프로토콜 모델로 공개. 현재의 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 통신 규약(프로토콜)의 모음. OSI 7계층 모델 1984년 네트워크 통신을 체계적으로 다루는 ISO에서 표준으로 지정한 모델. 데이터를 주고받을 때 데이터 자체의 흐름을 각 구간별로 나눠 놓은 것 TCP/IP모델과 OSI 7계층 공통점과 차이점 공통점 - 계층적 네트워크 모델 - 계층간 역할 정의 차이점 - 계층의수 차이 - OSI는 역할 기반, TCP/IP는 포로토콜 기반 - OSI는 통신 전반에 대한 표준 - TCP/IP는 데이터 전송기술 특화 패킷 네트워

2계층 - Ethernet Protocol [내부링크]

기능 - 하나의 네트워크 대역 - 즉, 같은 네트워크 상에 존재하는 여러 장비들 중에서 어떤 장비가 어떤 장비에게 보내는 데이터를 전달 - 추가적으로 오류제어, 흐름제어 수행 크기 - 하나의 네트워크 대역 LAN에서만 통신할 때 사용 - 다른 네트워크와 통신할 때는 항상 3계층이 도와주어야 함 - 3계층의 주소와 3계층의 프로토콜을 이용하여야만 다른 네트워크와 통신이 가능 MAC 주소 - 물리적인 주소. LAN에서 통신할 때 사용 - 16진수로 주소 표기 - AA:BB:CC:DD:EE:FF 또는 AA-BB-CC-DD-EE-FF 처럼 1바이트마다 :, - 로 구분해서 표기 AA:BB:CC 앞의 3바이트는 OUI, LAN카드(NIC)를 만들고 해당 NIC에 주소를 부여하는 회사의 고유값, IEEE에서 부여하는 일종의 제조회사 식별 ID DD:EE:FF 뒤의 3바이트는 해당 회사에서 생산되는 제품의 고유번호 (랜카드=Network Interface Card, NIC) 2계층 프로토콜 (L

Dreamhack | proxy-1 [내부링크]

Raw Socket Sender가 구현된 서비스입니다. 요구하는 조건을 맞춰 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. 문제 페이지이다. Raw Socket Sender 눌렀을 때 나오는 페이지이다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' @app.route('/') def index(): return render_template('index.html') @app.route('/socket', methods=['GET', 'POST']) def login(): if request.method == 'GET': return

SQLI 문자열 우회 [내부링크]

대소문자 검사 미흡 "UNION"과 "union" 모두 검사할 때, UnIoN 탐지 과정 미흡 "UNION"과 "union" 문자열 탐지 후 공백으로 치환하는 경우, UNunionION 문자열 검사 미흡 admin 키워드 검사하는 경우, 함수 사용: reverse('nimda'), concat('adm','in') 16진법, 2진법 사용: x'61646d696e', 0x61646d696e 연산자 검사 미흡 "and", "or" 연산자 키워드 검사하는 경우, ^, =, !=, %, /, *, &, &&, |, ||, >, <, XOR, DIV, LIKE, RLIKE, REGEXP, IS, IN, NOT, MATCH, AND, OF, BETWEEN, ISNULL 공백 탐지 공백 대신 /**/, () Tab(0x09) → %09(URL인코딩) like 구문 사용 admin" and upw like "pw%"-- admin" and upw regexp 'pw.*'-- [MySQL] 진법 이

우분투 마우스 먹통.. [내부링크]

1. 로그인 화면에서 Ctrl + Alt + F2(~F6)를 눌러서 tty 상태로 진입 (TTY(teletypewriter): 리눅스 디바이스 드라이브 중에서의 콘솔이나 터미널) 2. 사용자 이름 및 패스워드 입력하여 로그인 3. $ sudo apt-get install xserver-xorg-input-all 4. $ startx 5. 재시작: Player-Power-Restart Guest

Dreamhack | sql injection bypass WAF [내부링크]

Exercise: SQL Injection Bypass WAF에서 실습하는 문제입니다. # app.py import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass') app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users') mysql = MySQL(app) template =''' <pre style="font-size:200%">SELECT * FROM user

Dreamhack | sql injection bypass WAF Advanced [내부링크]

Exercise: SQL Injection Bypass WAF의 패치된 문제입니다. https://blog.naver.com/nyyyun2/223296346374 Dreamhack | sql injection bypass WAF Exercise: SQL Injection Bypass WAF에서 실습하는 문제입니다. 코드를 보니 MySQL DBMS... blog.naver.com sql injection bypass WAF Advanced 문제 코드는 위 링크 문제와 거의 동일하다. 하지만 이 문제에서는 검사하는 키워드 종류가 많아졌고 키워드를 모두 소문자로 변환하여 검사하게끔 했다. keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/', '\n', '\r', '\t', '\x0b', '\x0c', '-', '+'] def check_WAF(data): for keyword in keywords: if k

UI, GUI, CUI [내부링크]

UI(User Interface) 사용자 인터페이스의 약자로, 사용자와 컴퓨터 시스템 간의 상호작용을 가능하게 하는 모든 방법과 수단을 의미함 (컴퓨터 프로그램, 웹사이트, 애플리케이션 등에서 사용자가 시스템을 조작하고 피드백을 받는 인터페이스 포함) 넓은 의미로 사용되며, 그 형태는 텍스트, 그래픽, 오디오, 터치 등 다양할 수 있음 GUI(Graphical User Interface) 그래픽 사용자 인터페이스의 약자로, 사용자가 그래픽 요소를 사용하여 컴퓨터와 상호 작용을 하는 인터페이스 (창, 아이콘, 버튼, 스크롤바 등 시각적 요소 포함) 직관적이고 사용하기 쉬움 사용자는 마우스, 트랙패드, 터치스크린 등을 사용하여 그래픽 요소를 조작할 수 있음 CUI(Command-Line User Interface) 명령줄 사용자 인터페이스의 약자로, 텍스트 기반의 명령어를 입력하여 컴퓨터와 상호작용하는 인터페이스 (시스템 리소스를 적게 사용하며, 스크립트와 자동화에 유리함) UI: 사용

Webhacking.kr | Challenge 49 [내부링크]

Challenge 49번 문제 페이지이다. SQL INJECTION 문제이고 level 값을 입력하게끔 되어있다. <?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 49</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get> level : <input name=lv value=1><input type=submit> </form> <?php if($_GET['lv']){ $db = dbconnect(); if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack"); $result = mysqli_fetch_array(mysqli_query($db,"select id f

Webhacking.kr | Challenge 15 [내부링크]

Challenge 15번 문제 페이지이다. 들어가자마자 접근 불가라고 뜨며 webhacking.kr로 돌아가게 된다. alert창 때문에 소스코드를 보기 힘들기도 하니 자바스크립를 끄도록 하자. 설정 > 개인 정보 보호 및 보안 > 사이트 설정 >자바스크립트 JavaScript 사용이 허용되지 않음 에 15번 문제 사이트(https://webhacking.kr/challenge/js-2/)를 추가한다. (https://webhacking.kr/ 을 추가해도 된다.) 그 후 재접속 하면 alert창이 실행되지 않게 되었다. 소스 코드를 보니 url에 ?getFlag를 입력하면 flag를 얻을 수 있는 거 같다. 입력해주었는데 아무 변화가 없다. 자바스크립트 차단을 풀어주도록 한다. 그 후 다시 입력해보면 문제가 풀렸다.

open 함수 [내부링크]

XMLHttpRequest 객체의 메서드 중 하나로, HTTP 요청을 설정하고 초기화하는 데 사용됨 xhr.open(method, url[, ansync[, username [, password]]]); method: HTTP 요청 메서드를 나타내는 문자열. 주로 "GET" 또는 "POST"를 사용함 url: 요청을 보낼 서버의 URL을 나타내는 문자열 async (선택사항): 비동기적 요청 여부를 나타내는 불리언 값. 기본적으로 true(비동기) username (선택 사항): 인증을 필요로 하는 경우 사용자 이름을 나타내는 문자열 password (선택사항): 인증을 필요로 하는 경우 비밀번호를 나타내는 문자열 'open' 함수를 호출하면 XMLHttpRequest 객체는 지정된 설정으로 초기화되며, 이후 'send' 함수를 호출하여 요청을 서버로 보낼 수 있음

send 함수 [내부링크]

XMLHttpRequest 객체를 사용하여 서버로 HTTP 요청을 보내는 메서드 (open 함수를 사용하여 요청을 초기화하고 설정한 후, send 함수를 호출하여 실제 요청을 서버로 전송) chr.send([boby]) boby (선택사항): 요청 본문을 나타내는 파라미터. 주로 POST 요청과 함께 데이터를 서버로 보낼 때 사용 GET 요청에서는 null 또는 생략 가능

innerHTML [내부링크]

HTML 요소의 속성 중 하나로, 해당 요소 내부의 HTML 콘텐츠를 나타내는 속성 HTML 요소의 내용을 동적으로 변경하거나 콘텐츠를 가져올 수 있음 id가 myElement인 <div> 요소의 내용을 변경하는 코드 <div id="myElement">기존 내용</div> <script> // 요소에 대한 참조 가져오기 var element = document.getElementById("myElement"); // innerHTML을 사용하여 내용 변경 element.innerHTML = "새로운 내용"; </script> <div> 요소의 내용을 "새로운 내용"으로 변경함

responseText [내부링크]

XMLHttpRequest 객체의 속성 중 하나로, 서버로부터 받은 HTTP 응답의 텍스트 내용을 나타냄 서버로부터 받은 데이터를 JavaScript 코드에서 읽어오고 처리하는 데 사용됨 var xhr = new XMLHttpRequest(); xhr.open("GET", "https://example.com/api/data", true); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { // 서버로부터 받은 텍스트 데이터를 가져옵니다. var responseData = xhr.responseText; // responseData를 이용하여 원하는 작업을 수행합니다. console.log(responseData); } }; xhr.send(); 서버로부터 받은 텍스트 데이터를 가져와 콘솔에 출력함

setTimeout() [내부링크]

JavaScript에서 사용되는 타이머 함수 중 하나로, 일정한 시간이 지난 후에 지정된 함수를 실행하도록 예약하는 역할을 함 setTimeout(function, delay); function: 실행할 함수 또는 코드 블록을 나타내는 함수 참조 delay: 함수를 실행하기 전에 대기할 시간을 밀리초 단위로 나타내는 숫자 사용 예시 setTimeout(function() { console.log("Hello, World!"); }, 2000); // 2초 후에 실행

echo [내부링크]

문자열이나 변수 상수에 저장된 값들을 출력하기 위해 사용 HTML 태그를 포함하여 웹브라우저에 전송되는 함수 echo문은 여러 개의 인수를 출력할 수 있음 1) 문자열 출력 출력되는 문자열은 인용부호를 이용하여 출력함 단일, 이중 인용부호 모두 사용 가능('', "") // echo_1.php echo "PHP 학습"; echo 'HTML과 echo함수'; echo "웹브라우저 출력"; // 결과 PHP 학습HTML과 echo함수웹브라우저 출력 2) 변수 출력 변수명으로만 출력가능 이중 인용부호, 괄호 등을 이용하여 출력 가능 // echo_2.php $str1 = "PHP 학습"; $str2 = "HTML과 echo함수"; $str3 = "웹브라우저 출력"; echo $str1; echo "$str2"; echo ($str3); // 결과 PHP 학습HTML과 echo함수웹브라우저 출력 다른 문자열과 함께 출력 가능 변수와 문자열 공백없이 출력하기 위해 {} 기호 사용 // ech

print문, printf문 [내부링크]

print문: echo문과 동일한 방법으로 사용하지만, 인수는 1개만 가능하며 괄호를 사용하지 않음 // print_1.php $str1 = "PHP 학습"; print "$str1 HTML과 echo 함수"; print "<br>"; print "{$str1}HTML과 echo 함수"; // 결과 PHP 학습 HTML과 echo 함수 PHP 학습HTML과 echo 함수 // print_2.php $str1 = "PHP 학습&nbsp;&nbsp;&nbsp;"; print $str1, "HTML과 echo함수<br>"; // 결과 Parse error: syntax error, unexpected token "," in printf문: 정수, 실수, 문자열을 다양한 형태로 출력하는 함수 % 기호와 함께 각 형태를 나타내는 지시 문자를 통해 출력을 설정함 데이터 타입 지시 문자 int d, u, c, o, x, X, b float e, E, f, F, g, G, h, H string s

Cookie & Session [내부링크]

HTTP 프로토콜 특징 Connectionless: 하나의 요청에 하나의 응답을 한 후 연결을 종료하는 것을 의미. 특정 요청에 대한 연결은 이후의 요청과 이어지지 않고 새 요청이 있을 때마다 항상 새로운 연결을 맺음 Stateless: 통신이 끝난 후 상태 정보를 저장하지 않는 것을 의미. 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음 (클라이언트의 IP 주소와 User-Agent는 매번 변경될 수 있는 고유하지 않는 정보일 뿐만 아니라 위와 같은 특징 때문에 웹 서버는 클라이언트를 기억할 수 없음) 쿠키(Cookie): Key와 Value로 이뤄진 일종의 단위로, 서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때마다 쿠키를 같이 전송함. 서버는 클라이언트의 요청에 포함된 쿠키를 확인해 클라이언트를 구분할 수 있음 용도: 일반적으로 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용 정보기록: 클라이언트의 팝업 옵션 기억하기 위해(ex

변수 [내부링크]

변수와 메모리 주소 변수와 상수: 수치나 문자열 같은 값들을 저장하는 기억장소 변수: 값들이 변경될 수 있는 기억장소 상수: 한 번 지정한 값을 변경할 수 없는 기억장소 이러한 기억장소를 메모리(RAM:주기억장치)의 물리적 주소라고 하며, 변수의 이름은 곧 메모리 주소 기본형 변수: 정수형, 실수형, 문자형 등의 데이터 타입 변수. 기본형 변수는 메모리 저장공간에 변수의 값 자체가 직접 보관됨 기본형 변수의 메모리 구조 → 스택(Stack) 참조형(주소형) 변수: 배열, 객체, 함수와 같이 저장되는 값의 형태가 복합적인 변수. 참조형 변수는 저장공간에 보관되는 값의 형태가 다름 저장공간에 "값"이 아닌 "Heap 메모리의 주소"가 보관됨 참조형 변수가 호출되면 스택의 저장공간에 보관된 Heap 메모리의 주소로 이동하여 Heap 메모리에서 처리됨 참조형 변수의 주소와 값 할당 1) 배열: 배열의 복사는 기본적으로 값을 복사함. 배열의 복사를 참조 방식으로 하려면 명시적으로 & 기호를

Dreamhack | baby-union [내부링크]

로그인 시 계정의 정보가 출력되는 웹 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 문제에서 주어진 init.sql 파일의 테이블명과 컬럼명은 실제 이름과 다릅니다. 플래그 형식은 DH{...} 입니다. 문제 페이지이다. CREATE DATABASE secret_db; GRANT ALL PRIVILEGES ON secret_db.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass'; USE `secret_db`; CREATE TABLE users ( idx int auto_increment primary key, uid varchar(128) not null, upw varchar(128) not null, descr varchar(128) not null ); INSERT INTO users (uid, upw, descr) values ('admin', 'apple', 'For admin'); INSERT INTO us

input() [내부링크]

input(): 사용자가 키보드로 입력한 모든 것을 문자열로 저장함 >>> a = input() Life is too short, you need python >>> a 'Life is too short, you need python 사용자에게 입력을 받을 때 안내 문구 또는 질문을 보여주고 싶은 경우 >>> number = input("숫자를 입력하세요: ") 숫자를 입력하세요: >>> number = input("숫자를 입력하세요: ") 숫자를 입력하세요: 3 >>> print(number) 3 input()은 입력되는 모든 것을 문자열 취급하기 때문에 number는 숫자가 아닌 문자열임 input() 함수를 사용하여 입력받은 값은 항상 문자열(str) 타입 >>> type(number) <class 'str'> input()에 아무것도 입력하지 않았을 경우 오류가 발생하기에, 아래와 같이 코드 작성 user_input = input("숫자를 입력하세요: ") if user_in

Client Side Attack [내부링크]

Client Side Attack → xss, csrf 등 - XSS(Cross Site Scripting) - Stored XSS: 악의적인 사용자가 게시판이나 사용자 프로필에 악성 스크립트를 저장. (악성 스크립트가 서버 내에 db, 파일 등의 형태로 저장됨) 그것을 조회했을 때 의도치 않은 동작 실행. - Reflect XSS: URL 파라미터에 스크립트를 넣어 (서버에 저장하지 않고) 즉시 스크립트를 실행. ex; 게시물 조회 URL에서 XSS 확인 - ?param=<script>alert(1)</script> - ?param=<image src="img"> - ?param=<img src="#" onerror="alert(1)"> - ?param=<svg/onload="alert(1)"> -<script>window.open('http://127.0.0.1:8000/memo?memo='+document.cookie)</script> -<image src="location.h

SQL Injection DBMS 종류와 버전 확인 [내부링크]

SQL Injection 취약점 발견 시, 제일 먼저 알아내야 할 정보는 DBMS의 종류와 버전 쿼리 실행 결과 출력 - DBMS에서 지원하는 환경 변수의 값 이용 SELECT @@version SELECT version() 에러 메시지 출력 select 1 union select 1, 2; # MySQL => ERROR 1222 (21000): The used SELECT statements have a different number of columns (select * from not_exists_table) // 에러 메시지를 통해 테이블 columns 수 확인 # SQLite => Error: no such table: not_exists_table // 에러 메시지를 통해 테이블 존재여부 확인 참 또는 거짓 출력 애플리케이션에서 쿼리 실행 결과가 아닌 참과 거짓 여부만을 출력하는 경우 Blind SQL Injection 기법 사용 mid(@@version, 1, 1)='5'

MySQL DBMS 종류와 버전 확인 [내부링크]

쿼리 실행 결과 출력 mysql> select @@version; # select version(); +-------------------------+ | @@version | +-------------------------+ | 5.7.29-0ubuntu0.16.04.1 | +-------------------------+ 1 row in set (0.00 sec) 에러 메시지 출력 mysql> select 1 union select 1, 2; ERROR 1222 (21000): The used SELECT statements have a different number of columns 참 또는 거짓 출력 version 환경 변수의 값이 "5.7.29-0ubuntu0.16.04."일 때 Blind SQLI로 한 글자씩 알아냄 # @@version => '5.7.29-0ubuntu0.16.04.', mid(@@version, 1, 1) => '5' mysql> select mid(

PostgreSQL DBMS 종류와 버전 확인 [내부링크]

쿼리 실행 결과 출력 postgres=$ select version(); version -------- PostgreSQL 12.2 (Debian 12.2-2.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit (1 row) 에러 메시지 출력 postgres=$ select 1 union select 1, 2; ERROR: each UNION query must have the same number of columns LINE 1: select 1 union select 1, 2; 참 또는 거짓 출력 - 쿼리의 결과로 't', 'f' 반환(참, 거짓) /* version() => 'PostgreSQL ...', substr(version(), 1, 1) => 'P' */ postgres=$ select substr(version(), 1, 1)='P'; ?column? ----------

MSSQL DBMS 종류와 버전 확인 [내부링크]

쿼리 실행 결과 출력 > select @@version; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) - 14.0.3048.4 (X64) Nov 30 2018 12:57:58 Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Linux

SQLite DBMS 종류와 버전 확인 [내부링크]

쿼리 실행 결과 출력 sqlite_version 함수를 통해 DBMS의 버전 확인 sqlite> select sqlite_version(); 3.11.0 에러 메시지 출력 sqlite> select 1 union select 1, 2; Error: SELECTs to the left and right of UNION do not have the same number of result columns 참 또는 거짓 출력 -- sqlite_version() => '3.11.0', substr(sqlite_version(), 1, 1) => '3' sqlite> select substr(sqlite_version(), 1, 1)='3'; 1 sqlite> select substr(sqlite_version(), 1, 1)='4'; 0 예외 상황 쿼리 실행 결과를 반환하지 않을 때 LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(300000000/2)))) 를 통해 시간 지연

다크웹(Dark Web) [내부링크]

다크웹(Dark Web): 다크넷에 존재하는 웹 콘텐츠를 의미하며 접근하기 위해서는 특정 소프트웨어054나 설정 또는 인증이 필요함. 특징: 검색 엔진에서 인덱싱되지 않는다는 것 인터넷으로부터 접속자의 IP 주소를 숨기는 웹사이트로 구성된 인터넷 영역이며 보통 접속하기 위해서는 방문자의 IP 주소를 숨기는 특별 프로그램이나 기술이 필요함. 다크웹 사이트는 다크넷에 호스팅되어 있으며 거의 모든 트래픽이 암호화되어있음 다크웹과 딥웹의 차이 딥웹: 접근하기 위해 로그인이나 결제가 필요한 콘텐츠가 존재하는 인터넷 영역(구글 드라이브 등의 클라우드 스토리지나 이메일 받은편지함, 인터넷 뱅킹 포털, 구독 서비스 등) 다크웹: 딥웹에 포함되는 개념으로, 딥웬 중 검색 엔진에 인덱싱되어 있지 않고 접근하기 위해 특별한 도구가 필요한 인터넷 영역 다크웹의 시작: 스코틀랜드 에든버러 대학생들의 졸업 프로젝트에서 시작되었다. 분산화된 P2P 파일 공유 프로그램을 개발하기 위해서 만들어짐. 1999년 이

DMZ(Demilitarized Zone) [내부링크]

[네트워크] DMZ(Demilitarized Zone) 의미와 뜻 네트워크에서 내부망과 외부망에대해서 이야기할 때가 있습니다. 이때 DMZ라는 용어도 함께 언급되는데요 DMZ란 한국어로 직역하면 비무장지대로 아군과 적군 어느쪽이든 무장을 하지 않은 상태를 의미합니다. 그렇다면 네트워크에서 말하는 DMZ는 어떤 의미를 가질까요? 간단하게 DMZ가 가지는 의미부터 어떤 용도로 사용되는지까지 알아봅시다. DMZ란? DMZ란 Demilitarized Zone의 약자로 내부/외부망의 중간 지점을 의미합니다. 내부/외부 네트워크 사이에 중간지점에 위치하여 침입 차단 시스템 등으로 접근 제한을 수행하지만 외부... hyeri0903.tistory.com 내부 네트워크와 외부 네트워크 사이에 있는 중간 지역. 내부/외부 네트워크 사이에 중간지점에 위치하여 침입 차단 시스템 등으로 접근 제한을 수행함. - 외부망과 내부망의 중간 경계에 위치함 - 내부망 사용자들은 안전하게 외부 인터넷에 접근하여 정

Netcat(nc) 명령어 [내부링크]

Netcat(넷캣): TCP, UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 유틸리티 프로그램 간단한 클라이언트-서버 애플리케이션을 만들고, 파일을 전송하고, 포트를 스캔하는 등의 작업에 사용할 수 있음 -d 콘솔에서 분리되어 백그라운드 모드로 실행 -e prog 접속 시 프로그램 실행 [위험함!!!] -g gateway source-routing hop point[s]를 8씩 증가 -G num source-routing hop point를 4, 8, 12 .. 4식 증가 -h 도움말 -i secs 라인전송[포트스캔]시 지연 시간 설 -l 서버 모드 - 접속/연결 대기 상태. 인바운드 커넥션을 위해서 listen 모드로 실행 -L 서버모드[강제모드] - 소켓이 닫혀도 Listen. 소켓 종료시 재전송 실행 -n IP 주소로만 작동(DNS를 사용하지 않음) -o file 지정된 파일로 트래픽을 출력함 -p port 로컬 포트 번호 지정 -r 로컬/리모트 포트번호 랜덤

app = Flask(__name__) [내부링크]

https://lovelydiary.tistory.com/297 파이썬) __name__ 변수는 뭐지? (+if __name__=="__main__"의 의미..) #1. 변수를 정의할 때 꼭 필요한 문장? 함수를 정의하는 것과 관련하여 파이썬 강의를 듣는 중이었다. 함수의 기능을 열심히 정의를 하고 나서 선생님이 꼭 마지막에 희한한 무언가를 붙이셨다. 그런데 그 코드에 대한 설명은 없으셔서 프로그래머들 사이에서는 기본적으로 알고 있는 지식인가 했다. 그 코드는 아래와 같다. ------------------------------- if __name__=="__main__": 함수이름 () ------------------------------- if문이야 자주 보았던 문법이어서 그러려니 했는... lovelydiary.tistory.com app 객체 플라스크 애플리케이션의 핵심이며, 모든 설정, URL 라우팅, 뷰 함수 등을 관리하는데 사용됨 __name__: 파이썬의 내장변수 혹

Webhacking.kr | Challenge 06 [내부링크]

문제를 클릭하면 소스 코드를 볼 수 있는 view-source가 나오고, 그 아래에는 ID가 guest라는 정보와 PW가 123qwe라는 정보가 나온다. view-source를 클릭하면 <?php include "../../config.php"; if($_GET['view_source']) view_source(); if(!$_COOKIE['user']){ $val_id="guest"; $val_pw="123qwe"; for($i=0;$i<20;$i++){ $val_id=base64_encode($val_id); $val_pw=base64_encode($val_pw); } $val_id=str_replace("1","!",$val_id); $val_id=str_replace("2","@",$val_id); $val_id=str_replace("3","$",$val_id); $val_id=str_replace("4","^",$val_id); $val_id=str_replace("5",

Host(호스트) [내부링크]

host: 주인, 주최국, 진행자라는 뜻 다른 컴퓨터 또는 사용자로부터 요청을 받아 처리하거나 특정 서비스를 제공할 수 있는 능력을 가진 컴퓨터, 인터넷을 통해 다른 컴퓨터들과 쌍방향 통신이 가능한 컴퓨터

외/내부 네트워크 [내부링크]

내부 네트워크: 로컬 네트워크의 개념으로 라우터 안쪽에 자리함. 이 안에서는 장비들의 Internal IP(Private IP) 주소를 가지고 통신함. Internal IP 주소는 내부 네트워크를 벗어나면 사용할 수 없음. 외부 네트워크: 라우터나 방화벽을 넘어 밖에 위치한 네트워크. External IP 주소를 가지고 통신함. 라우터 기준 왼쪽이 외부 네트워크, 오른쪽이 내부 네트워크 외부 네트워크: 특수용도 네트워크 주소를 제외한 주소. 내부 네트워크: 로컬 네트워크 주소. 192.168.x.x로 시작함. 특수 용도 주소(IPv4) 0.0.0.0/8 자체 네트워크 10.0.0.0/8 사설 네트워크 127.0.0.0/8 루프백(loopback) 즉, 자기자신 169.254.0.0/16 링크 로컬(link local) 172.16.0.0/12 사설 네트워크 192.0.2.0/24 예제 등 문서에서 사용 192.88.99.0/24 6to4 릴레이 애니캐스트 192.168.0.0/16

from ... import ~ [내부링크]

주로 모듈에서 클래스, 함수, 변수 등을 가져오는 데 사용 '...'는 모듈이나 패키지의 경로 '~'는 가져오려는 식별자 ex) from flask import Flask: flask 모듈에서 Flask 클래스를 가져옴 from math import sqrt: math 모듈에서 sqrt 함수를 가져옴 from mymodule import myfunction: mymodule 모듈에서 myfunction 함수를 가져옴 모듈(module): 프로그램을 구성하는 구성요소로, 관련된 데이터 함수를 하나로 묶은 단위

Flask(플라스크) [내부링크]

플라스크: 마이크로 웹 프레임워크 특징: 간결하다. 확장성 있는 설계, 자유로운 프레임워크 확장성 있는 설계 플라스크에는 폼(form), 데이터베이스(database)를 처리하는 기능이 없음. 예를 들어 장고라는 웹 프레임워크는 프레임워크 자체에 폼과 데이터베이스를 처리하는 기능이 포함되어 있음. 장고는 쉽게 말해 덩치가 큰 프레임워크임. 플라스크는 확장 모듈을 사용하여 이를 보완함. → 플라스크로 만든 프로젝트의 무게가 가볍다는 것을 의미 플라스크는 처음부터 모든 기능을 포함하지 않음. 개발자가 필요한 확장 모듈을 포함해 가며 개발함. 자유로운 프레임워크 플라스크는 자유도가 높은 프레임워크임. 프레임워크는 대부분 규칙이 복잡하고 개발자는 그 규칙을 반드시 따라야 함. 규칙을 따라야하는 건 플라스크도 마찬가지. 하지만 플라스크에는 최소한의 규칙만 있으므로 개발의 자유도는 다른 프레임워크보다 높은 편임.

플라스크 확장 모듈 [내부링크]

Flask-RESTful: RESTful API를 빌드하기 위한 툴킷을 제공함. RESTful 웹 서비스를 쉽게 작성하고 라우팅할 수 있도록 도와줌. Flask-SQLAlchemy: SQLAlchemy를 통합하여 데이터베이스와 상호 작용하는 데 도움을 줌. SQLAlchemy는 데이터베이스 추상화 및 ORM(Object-Relational Mapping)을 제공하는 모듈. Flask-WTF(WTForms): 웹 양식을 렌더링하고 검증하는 데 사용되는 확장 모듈. 사용자 입력 데이터를 처리하고 유효성을 검사하는 데 도움을 줌. Flask-Login: 사용자 인증과 세션 관리를 처리하기 위한 도구를 제공. 사용자 로그인, 로그아웃, 사용자 정보 관리 등을 관리하는데 사용됨. Flask-Mail: 이메일발송을 지원함. 사용자에게 이메일을 보내거나 알림을 보내는 데 사용됨. Flask-CORS: CORS(Croos-Origin Resource Sharing) 정책을 관리하는 데 사용됨. 다

def [내부링크]

파이썬 프로그래밍 언어에서 함수(함수 정의)를 정의하는 키워드 def add_numbers(a, b): result = a + b return result 1. def 키워드로 함수 정의 시작 2. 함수의 이름인 add_numbers가 나옴. 이 이름을 사용하여 함수 호출 가능 3. 괄호 '()'내에 매개변수 목록인 a, b 정의. 이 매개변수는 함수에 입력으로 전달되는 값들을 받음. 4. 콜론 ':' 다음에 들여쓴 블록은 함수의 본문. 5. return 키워드를 사용하여 함수가 계산한 결과를 반환

Webhacking.kr | Challenge 11 [내부링크]

Challenge 11번 문제 페이지이다. <?php include "../../config.php"; if($_GET['view_source']) view_source(); ?><html> <head> <title>Challenge 11</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } </style> </head> <body> <center> <br><br> <?php $pat="/[1-3][a-f]{5}_.*$_SERVER[REMOTE_ADDR].*\tp\ta\ts\ts/"; if(preg_match($pat,$_GET['val'])){ solve(11); } else echo("<h2>Wrong</h2>"); echo("<br><br>"); ?> <a href=./?view_source=1>view-source</a> </center> </body> </html> 페이지

PHP 코드 작성의 구조 [내부링크]

PHP 코드의 시작과 끝: <?php ... ?> <? ... ?>도 가능. (\xampp\php폴더에 있는 php.ini 파일에서 short_open_tag를 On으로 변경하여 저장하면 사용 가능) 문장 구분 한 문장의 끝은 세미콜론(;) 기호로 구분 공백과 Enter(개행) 들여쓰기 등을 위한 여러 개의 공백은 한 개와 동일함 각 문장을 ; 기호로 구분되므로 공백, 개행은 코드의 가독성을 위해서 사용됨 주석(Comment) 1줄 주석(//, #) 2줄 이상 주석(/* */) ※ 2줄 이상 주석 기호를 이중으로 사용하면 에러 발생 대문자와 소문자 PHP 키워드인 <?php, echo, if, print 등은 <?PHP, ECHO, IF, PRINT와 같이 사용해도 됨(구별하지 않음) But, 사용자가 정의한 변수명, 상수명은 대소문자를 구별함. ex) $Name과 $name은 다른 변수 But, 사용자가 정의한 함수명은 대소문자 구별하지 않음 ex) add() 함수와 ADD() 함

Honeypot(허니팟) [내부링크]

침입자를 기만하기 위한 목적으로 의도적으로 설치한 가상 시스템. 해커가 허니팟을 해킹하는 동안 대응 시간을 확보하고 해커의 공격 기법을 파악하거나 역추적하는 등 해킹 대응 목적으로 활용함.(해커를 유혹하는 꿀단지) 일부러 취약점을 드러내 침입을 유도하고, 해커가 허니팟을 공격하는 동안 해킹 경로와 수법 등을 분석해 해커를 역추적하는 기술 허니팟으로 네트워크를 구성한 것 → 허니넷(Honeynet)

DNS(Domain Name System) [내부링크]

도메인 이름과 IP 주소를 서로 변환하는 역할. 상위 기관에서 인증된 기관에게 도메인을 생성하거나 IP 주소로 변경할 수 있는 '권한'을 부여함. 이처럼 상위 기관과 하위 기관과 같은 계층 구조를 가지는 분산 데이터베이스 구조를 가짐

Router(라우터) [내부링크]

컴퓨팅 디바이스와 네트워크를 다른 네트워크에 연결하는 네트워킹 디바이스. 논리적 또는 물리적으로 분리된 망 사이를 지나는 패킷의 위치에 따라 최적화된 경로(루트, route)를 지정하는 기능을 수행하는 장비. OSI 7계층 분류에서는 네트워크(L3) 계층에 속함. L3 스위치라고도 부름. 라우터의 기능 - 네트워크와 네트워크 연결 - NAT(Network Address Translation): 네트워크 주소 변환, Private IP ↔ Public IP - 방화벽 - VPN(Virtual Private Network) - QoS(Quality of Service)

VPN(Virtual Private Network) [내부링크]

가상 사설망: 두 개 이상의 물리적 네트워크(또는 장치) 사이의 인터넷/공용 네트워크를 통해 생성된 가상 네트워크 인터넷을 이용하여 고비용의 사설망을 대체하는 효과를 얻기 위한 기술로 인터넷망과 같은 공중망을 사용하여 둘 이상의 네트워크를 안전하게 연결하기 위하여 가상의 터널을 만들고 암호화된 데이터를 전송할 수 있도록 구성된 네트워크

OSI 7 layer | TCP/IP 4 layer [내부링크]

OSI 7계층: ISO(국제표준화기구)가 다양한 네트워크 간의 호환을 위해 만든 표준 네트워크 모델 OSI 7 layer TCP/IP 계층별 프로토콜 보안 프로토콜 응용 계층 응용 계층 HTTP Telnet DNS SSH S/MIME 표현 계층 세션 계층 전송 계층 전송 계층 TCP, UDP SSL, TLS ← Port 네트워크 계층 네트워크 계층 IP, ICMP, ARP IPSec ← IP 데이터링크 계층 링크 계층 ← mac 물리 게층 IPSec 프로토콜: AH, ESP, SA 동작방식: 전송모드, 터널모드 OSI(Open Systems Interconnection) 7 계층 : 통신이 일어나는 과정을 7단계로 정의한 국제 통신 표준 규약 물리(Physical Layer) : 데이터를 전기적인 신호로 변환해서 주고받는 기능을 진행하는 공간. 장비로는 통신 케이블, 허브가 존재한다. 데이터 링크(Data Link Layer) : 물리계층으로 송/수신되는 정보 확인하고 오류 없는 통

Proxy Server(프록시 서버) [내부링크]

Proxy: "대신"이라는 의미 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버 서버와 클라이언트 간에 특정 서비스를 "중계"해주는 역할. 동일 프로토콜로 연결함. 캐시 기능이 있음. 트래픽을 줄임. 트래픽 성능이 저하됨. 전송 시간을 향상시킴. 1. 클라이언트에서 프록시 서버로 전달할 요청을 보낸다. 2. 프록시 서버는 클라이언트로부터 전달 받은 요청을 서버에 요청한다. 3. 서버는 요청에 맞게 데이터를 프록시 서버로 전달한다. 4. 프록시 서버는 서버로부터 전달 받은 데이터를 클라이언트에 전달한다.

Python 기초 100제 | 6089번 [내부링크]

문제 설명 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다. 예를 들어 2 6 18 54 162 486 ... 은 2부터 시작해 이전에 만든 수에 3을 곱해 다음 수를 만든 수열이다. 이러한 것을 수학에서는 앞뒤 수들의 비율이 같다고 하여 등비(비율이 같다의 한문 말) 수열이라고 한다. (등비수열 : geometric progression/sequence) 등비 수열을 알게된 영일이는 갑자기 궁금해졌다. "그럼.... 13번째 나오는 수는 뭘까?" 영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 등비(r), 몇 번째인지를 나타내는 정수(n)가 입력될 때 n번째 수를 출력하는 프로그램을 만들어보자. 입력 시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 10) 출력 n번째 수를 출력한다. 풀이 a, r, n = map(int, input().split()) m

Python 기초 100제 | 6090번 [내부링크]

문제 설명 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다. 예를 들어 1 -1 3 -5 11 -21 43 ... 은 1부터 시작해 이전에 만든 수에 -2를 곱한 다음 1을 더해 다음 수를 만든 수열이다. 이런 이상한 수열을 알게 된 영일이는 또 궁금해졌다. "그럼.... 13번째 나오는 수는 뭘까?" 영일이는 물론 수학을 아주 잘하지만 이런 문제는 본 적이 거의 없었다... 그래서 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때, n번째 수를 출력하는 프로그램을 만들어보자. 입력 시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.(a, m, d는 -50 ~ +50, n은 10이하의 자연수) 출력 n번째 수를 출력한다. 풀이 a, m, d, n = map(int, input().split()

Gateway(게이트웨이) [내부링크]

컴퓨터 네트워크에서 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간의 통신을 가능하게 하는 컴퓨터나 소프트웨어를 두루 일컫는 용어. 한 네트워크에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점 다른 네트워크로 들어가는 관문(입구) 역할을 하는 네트워크 포인트. 넓은 의미로는 종류가 다른 네트워크 간 통로의 역할을 하는 장치. 게이트웨이를 지날 때마다 트래픽(traffic) 증가하기 때문에 속도가 느려질 수 있음. ex) 해외로 나가기 위해서 꼭 통과해야 하는 공항이 게이트웨이와 같은 개념. ex) 다른 언어를 사용하는 두 사람 사이에 통역사나 번역기와 유사. ex) 한 도시에서 다른 도시로 이동하기 위해서 통게이트를 지나는 것과 유사. 서로 다른 네트워크상의 통신 프로토콜(protocol, 통신규약)을 적절히 변환해주는 역할을 함.

Bastion Host(배스천 호스트) [내부링크]

Bastion: 보루, 요새라는 뜻으로 중세 시대에 영주나 왕이 있는 중요한 기지인 성을 둘러싸고 있는 방어막 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트 접근 제어 기능과 더불어 게이트웨이로서 가상 서버(Proxy Server)의 설치, 인증 로그 등을 담당함. 단일 홈 게이트웨이(Single-Homed Gateway) 구조임.

Python 기초 100제 | 6078번 [내부링크]

문제 설명 영문 소문자 'q'가 입력될 때까지 입력한 문자를 계속 출력하는 프로그램을 작성해보자. 입력 문자들이 1개씩 계속해서 입력된다. 출력 영문 소문자 'q'가 입력될 때까지 입력한 문자를 계속 출력한다. 풀이 while True : n = input() print(n) if n == "q" : break while True: x=input() print(x) if x=='q': break

Python 기초 100제 | 6079번 [내부링크]

문제 설명 1, 2, 3 ... 을 계속 더해 나갈 때, 그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만 계속 더하는 프로그램을 작성해보자. 즉, 1부터 n까지 정수를 계속 더해 나간다고 할 때, 어디까지 더해야 입력한 수보다 같거나 커지는 지를 알아보고자하는 문제이다. 입력 정수 1개가 입력된다. 출력 1, 2, 3, 4, 5 ... 를 순서대로 계속 더해 합을 만들어가다가, 입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다. 풀이 n = int(input()) t = 0 s = 0 while t<n : s = s+1 t = s+t print(s) n = int(input()) s = 0 t = 0 while s<n : t = t+1 s = s+t print(t)

Python 기초 100제 | 6080번 [내부링크]

문제 설명 1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때, 나올 수 있는 모든 경우를 출력해보자. 예시 ... for i in range(1, n+1) : for j in range(1, m+1) : print(i, j) ... 참고 위 코드는 바깥쪽의 i 값이 1부터 n까지 순서대로 바뀌는 각각의 동안에 안쪽의 j 값이 다시 1부터 m까지 변하며 출력되는 코드이다. 조건선택 실행구조 안에 다른 조건선택 실행구조를 넣어 처리할 수 있는 것과 마찬가지로 반복 실행구조 안에 다른 반복 실행구조를 넣어 처리할 수 있다. 원하는 형태로 실행 구조를 결합하거나 중첩시킬 수 있다. 입력 서로 다른 주사위 2개의 면의 개수 n, m이 공백을 두고 입력된다. 단, n, m은 10이하의 자연수 출력 나올 수 있는 주사위의 숫자를 한 세트씩 줄을 바꿔 모두 출력한다. 첫 번째 수는 n, 두 번째 수는 m으로 고정해 1부터 오름차순 순서로 출력하도록 한다. 풀이 n, m

Python 기초 100제 | 6081번 [내부링크]

문제 설명 16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운 영일이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다. A, B, C, D, E, F 중 하나가 입력될 때, 1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자. (단, A ~ F 까지만 입력된다.) 예시 ... print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='') ... 참고 print('%X'%n) #n에 저장되어있는 값을 16진수(hexadecimal) 형태로 출력 작은 따옴표 2개를 사용해서 print(..., sep='') 으로 출력하면, 공백없이 모두 붙여 출력된다. 작은 따옴표 2개 '' 또는 큰 따옴표 2개 "" 는 아무 문자도 없는 빈문자열(empty string)을 의미한다. 입력 16진수로 한 자리 수가 입력된다. 단, A ~ F 까지만 입력된다. 출력 입력된 16진수에 1~F까지 순서대로 곱한, 16진수 구구단

Python 기초 100제 | 6082번 [내부링크]

문제 설명 친구들과 함께 3 6 9 게임을 하던 영일이는 잦은 실수 때문에 계속해서 벌칙을 받게 되었다. 3 6 9 게임의 왕이 되기 위한 369 마스터 프로그램을 작성해 보자. ** 3 6 9 게임은? 여러 사람이 순서를 정한 후, 순서대로 수를 부르는 게임이다. 만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이라면, 수를 부르는 대신 "박수(X)" 를 쳐야 한다. 33과 같이 3,6,9가 두 번 들어간 수 일때, "짝짝"과 같이 박수를 두 번 치는 형태도 있다. 참고 ... for i in range(1, n+1) : if i%10==3 : print("X", end=' ') #출력 후 공백문자(빈칸, ' ')로 끝냄 입력 30 보다 작은 정수 1개가 입력된다. (1 ~ 29) 출력 1 부터 그 수까지 순서대로 공백을 두고 수를 출력하는데, 3 또는 6 또는 9가 포함 되어있는 수인 경우, 그 수 대신 영문 대문자 X 를 출력한다. 풀이 n = int(input())

Python 기초 100제 | 6083번 [내부링크]

문제 설명 빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다. 빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때, 주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자. **모니터, 스마트폰과 같은 디스플레이에서 각 픽셀의 색을 만들어내기 위해서 r, g, b 색을 조합할 수 있다. **픽셀(pixel)은 그림(picture)을 구성하는 셀(cell)에서 이름이 만들어졌다. 입력 빨녹파(r, g, b) 각 빛의 가짓수가 공백을 두고 입력된다. 예를 들어, 3 3 3 은 빨녹파 빛에 대해서 각각 0~2까지 3가지 색이 있음을 의미한다. 0 <= r,g,b <= 127 출력 만들 수 있는 rgb 색의 정보를 오름차순(계단을 올라가는 순, 12345... abcde..., 가나다라마...)으로 줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다. 풀이 r

Python 기초 100제 | 6084번 [내부링크]

문제 설명 소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다. 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고, 한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다. 값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고, 좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고, 녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다. 1초 동안 마이크로 소리강약을 체크하는 횟수를 h (헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.) 한 번 체크한 값을 저장할 때 사용하는 비트수를 b (2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..) 좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c (모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.) 녹음할 시간(초) s가 주어질 때, 필요한 저장 용량

Python 기초 100제 | 6085번 [내부링크]

문제 설명 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다. 가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을 빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데, 예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면, 한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서 총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다. 그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데, 1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한 저장 용량을 계산할 수 있다. 이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이 *.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다. 이미지의 가로

Python 기초 100제 | 6086번 [내부링크]

문제 설명 1, 2, 3 ... 을 순서대로 계속 더해 합을 만드는데, 그 합이 입력한 정수보다 작을 동안만 계속 더하는 프로그램을 작성해보자. 즉, 1부터 n까지 정수를 하나씩 더해 합을 만드는데, 어디까지 더해야 입력한 수보다 같거나 커지는지 알아보고자 하는 문제이다. 하지만, 이번에는 그 때 까지의 합을 출력해야 한다. 예를 들어, 57을 입력하면 1+2+3+...+8+9+10=55에서 그 다음 수인 11을 더해 66이 될 때, 그 값 66이 출력되어야 한다. 예시 ... while True : s += c c += 1 if s>=n : break print(s) 참고 조건문이나 반복문의 코드블록 안에서 break 가 실행되면, 반복실행을 중단(break)하고, 가장 가까운 반복 블록의 밖으로 빠져나간다. 입력 언제까지 합을 계산할 지, 정수 1개를 입력받는다. 단, 입력되는 자연수는 100,000,000이하이다. 1개가 입력된다. 출력 1, 2, 3, 4, 5 ... 순서대로

Python 기초 100제 | 6087번 [내부링크]

문제 설명 1부터 입력한 정수까지 1씩 증가시켜 출력하는 프로그램을 작성하되, 3의 배수인 경우는 출력하지 않도록 만들어보자. 예를 들면, 1 2 4 5 7 8 10 11 13 14 ... 와 같이 출력하는 것이다. 예시 ... for i in range(1, n+1) : if i%2==0 : continue #다음 반복 단계로 넘어간다. print(i, end=' ') #i가 짝수가 아닐 때만 실행된다. ... 위 코드는 홀 수만 출력하는 예시이다. 참고 조건문이나 반복문의 코드블록 안에서 continue 가 실행되면, 반복 블록 안에 있는 나머지 부분을 실행하지 않고, 다음 반복 단계로 넘어간다. 즉, 반복 블록의 나머지 부분은 실행되지 않고, 다음 단계의 반복을 계속(continue)하는 것이다. 입력 정수 1개를 입력받는다. (1 ~ 100) 출력 1부터 입력한 정수보다 작거나 같을 때까지 1씩 증가시켜 출력하되 3의 배수는 출력하지 않는다. 풀이 n = int(input()

Python 기초 100제 | 6088번 [내부링크]

문제 설명 어떤 규칙에 따라 수를 순서대로 나열한 것을 수열(sequences)이라고 한다. 예를 들어 1 4 7 10 13 16 19 22 25 ... 은 1부터 시작해 이전에 만든 수에 3을 더해 다음 수를 만든 수열이다. 이러한 것을 수학에서는 앞뒤 수들의 차이가 같다고 하여 등차(차이가 같다의 한문 말) 수열이라고 한다. (등차수열 : arithmetic progression/sequence) 수열을 알게 된 영일이는 갑자기 궁금해졌다. "그럼.... 123번째 나오는 수는 뭘까?" 영일이는 프로그램을 만들어 더 큰 수도 자동으로 계산하고 싶어졌다. 시작 값(a), 등차(d), 몇 번째인지를 나타내는 정수(n)가 입력될 때 n번째 수를 출력하는 프로그램을 만들어보자. 입력 시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 100) 출력 n번째 수를 출력한다. 풀이 a, d, n = map(int, input().sp

Python 기초 100제 | 6066번 [내부링크]

문제 설명 3개의 정수(a, b, c)가 입력되었을 때, 짝(even)/홀(odd)을 출력해보자. 예시 ... if a%2==0 : print("even") else : print("odd") ... 참고 if 조건식 : #조건식을 평가해서... 실행1 #True 인 경우 실행시킬 명령들... 실행2 else : 실행3 #False 인 경우 실행시킬 명령들... 실행4 실행5 #조건식과 상관없는 다음 명령 ... else 는 if 없이 혼자 사용되지 않는다. 또한, else 다음에는 조건식이 없는 이유는? True(참)가 아니면 False(거짓)이기 때문에... 조건식의 평가 결과는 True 아니면 False 로 계산되기 때문이다. python 에서는 들여쓰기를 기준으로 코드블록을 구분하므로, 들여쓰기를 정확하게 해주어야 한다. 입력 3개의 정수(a, b, c)가 공백을 두고 입력된다. 0 <= a,b,c <= 2147483647 출력 입력된 순서대로 짝(even)/홀(odd)을 줄

Python 기초 100제 | 6067번 [내부링크]

문제 설명 0이 아닌 정수 1개가 입력되었을 때, 음(-)/양(+)과 짝(even)/홀(odd)을 구분해 분류해보자. 음수이면서 짝수이면, A 음수이면서 홀수이면, B 양수이면서 짝수이면, C 양수이면서 홀수이면, D 를 출력한다. 예시 ... if n<0 : if n%2==0 : print('A') #주의 : 변수 A와 문자열 'A' / "A" 는 의미가 완전히 다르다. else : print('B') else : if n%2==0 : print('C') else : print('D') ... 참고 조건/선택 실행구조 안에 다시 조건/선택 실행구조를 "중첩"할 수가 있다. 또한, 중첩된 조건은 ... if (n<0) and (n%2==0) : print('A') ... 와 같이 논리연산자(not, and, or)를 이용해 합쳐 표현할 수도 있다. 비교연산(<, >, <=, >=, ==, !=) 의 계산 결과는 True 또는 False 의 불(boolean) 값이고, 불 값들 사이의

Python 기초 100제 | 6068번 [내부링크]

문제 설명 점수(정수, 0 ~ 100)를 입력받아 평가를 출력해보자. 평가 기준 점수 범위 : 평가 90 ~ 100 : A 70 ~ 89 : B 40 ~ 69 : C 0 ~ 39 : D 로 평가되어야 한다. 예시 ... if n>=90 : print('A') else : if n>=70 : print('B') else : if n>=40 : print('C') else : print('D') ... 참고 여러 조건들을 순서대로 비교하면서 처리하기 위해서 조건문을 여러 번 중첩할 수 있다. if 조건식1 : ... else : if 조건식2 : ... else : if 조건식3 : ... else : ... ... 와 같이 조건/선택 실행 구조를 겹쳐 작성하면 순서대로 조건을 검사할 수 있다. 어떤 조건이 참이면 그 부분의 내용을 실행하고 전체 조건/선택 구조를 빠져나가게 된다. if 조건식1 : ... elif 조건식2 : ... elif 조건식3 : ... else : ... 도

Python 기초 100제 | 6069번 [내부링크]

문제 설명 평가를 문자(A, B, C, D, ...)로 입력받아 내용을 다르게 출력해보자. 평가 내용 평가 : 내용 A : best!!! B : good!! C : run! D : slowly~ 나머지 문자들 : what? 입력 영문자 1개가 입력된다. (A, B, C, D 등 문자 1개가 입력된다.) 출력 문자에 따라 다른 내용이 출력된다. 풀이 c = str(input()) if c == "A" : print("best!!!") else : if c == "B" : print("good!!") else : if c == "C" : print("run!") else : if c == "D" : print("slowly~") else : print("what?")

Python 기초 100제 | 6070번 [내부링크]

문제 설명 월이 입력될 때 계절 이름이 출력되도록 해보자. 월 : 계절 이름 12, 1, 2 : winter 3, 4, 5 : spring 6, 7, 8 : summer 9, 10, 11 : fall 예시 ... if n//3==1 : print("spring") ... 참고 때때로 수들의 특징을 관찰하고 이용하면 매우 간단히 해결할 수도 있다. 입력 월을 의미하는 1개의 정수가 입력된다.(1 ~ 12) 출력 계절 이름을 출력한다. 풀이 n = int(input()) if n//3 == 1 : print("spring") else : if n//3 == 2 : print("summer") else : if n//3 == 3 : print("fall") else : print("winter")

Python 기초 100제 | 6071번 [내부링크]

문제 설명 임의의 정수가 줄을 바꿔 계속 입력된다. -2147483648 ~ +2147483647, 단 개수는 알 수 없다. 0이 아니면 입력된 정수를 출력하고, 0이 입력되면 출력을 중단해보자. 예시 ... n = 1 #처음 조건 검사를 통과하기 위해 0 아닌 값을 임의로 저장 while n!=0 : n = int(input()) if n!=0 : print(n) ... 참고 if 조건식 : ... ... 구조를 사용하면, 주어진 조건식의 평가 결과가 True 인 경우에만, 들여쓰기로 구분된 코드블록이 실행된다. if 를 while 로 바꾸면? while 조건식 : ... ... 와 같은 방법으로 반복해서 실행시킬 수 있다. 실행되는 과정은 1. 조건식을 평가한다. 2. True 인 경우 코드블록을 실행한다. 3. 다시 조건식을 평가한다. 4. True 인 경우 코드블록을 실행한다. ... ... 조건식의 평가 값이 False 인 경우 반복을 중단하고, 그 다음 명령을 실행한다.

Python 기초 100제 | 6072번 [내부링크]

문제 설명 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자. while 조건식 : ... ... 반복 실행구조를 사용해 보자. 예시 ... while n!=0 : print(n) n = n-1 ... 참고 n = n-1 #n에 저장되어있던 값에서 1만큼 뺀 후, 그 값을 다시 n에 저장시킨다. n -= 1 과 같이 짧게 작성할 수도 있다. n -= 1 은 n = n-1 과 같은 의미이다. 이렇게 산술연산자(+, -, *, / ... )와 대입 연산자(=)를 함께 쓰는 것을 복합대입연산자라고도 부른다. 같은 방법으로 +=, *=, /=, //=, %=, &=, |=, ^=, >>=, <<=, **= 등과 같이 짧게 작성할 수 있다. 처음에 조건식을 검사하고, 그 다음에 실행하고, 그 다음에 값을 바꾸고... 다시 조건식을 검사하고, 실행하고, 값을 바꾸고... 입력 정수 1개가 입력된다. (1 ~ 100) 출력 1만큼씩 줄이면서 한 줄에 1개씩 카운트다운 수를 출력한

Python 기초 100제 | 6073번 [내부링크]

문제 설명 정수(1 ~ 100) 1개가 입력되었을 때 카운트다운을 출력해보자. while 조건식 : ... ... 반복 실행구조를 사용해 보자. 참고 조건검사, 출력, 감소의 순서와 타이밍을 잘 생각해보자. 입력 정수 1개가 입력된다. (1 ~ 100) 출력 1만큼씩 줄이면서 카운트다운 수가 0이 될 때까지 한 줄에 1개씩 출력한다. 풀이 n = int(input()) n = n-1 while n!=-1 : print(n) n = n-1 a=int(input()) while a!=0: a=a-1 print(a)

Python 기초 100제 | 6074번 [내부링크]

문제 설명 영문 소문자(a ~ z) 1개가 입력되었을 때, a부터 그 문자까지의 알파벳을 순서대로 출력해보자. 예시 c = ord(input()) t = ord('a') while t<=c : print(chr(t), end=' ') t += 1 참고 알파벳 문자 a의 정수값은 ord('a')로 알아낼 수 있다. chr(정수값)을 이용하면 유니코드 문자로 출력할 수 있다. print(..., end=' ') 와 같이 작성하면 값 출력 후 공백문자 ' '를 출력한다. 즉, 마지막에 줄을 바꾸지 않고 빈칸만 띄운다. (end='\n'로 작성하거나 생략하면, 값을 출력한 후 마지막(end)에 줄바꿈(newline)이 된다.) 입력 문자 1개가 영문자 1개가 입력된다. (a ~ z) 출력 a부터 입력한 문자까지 순서대로 공백을 두고 한 줄로 출력한다. 풀이 c = ord(input()) f = ord("a") while f<c : print(chr(f), end=' ') f = f+1 pr

Python 기초 100제 | 6075번 [내부링크]

문제 설명 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자. 입력 정수 1개가 입력된다. (0 ~ 100) 출력 0부터 그 수까지 줄을 바꿔 한 개씩 출력한다. 풀이 n = int(input()) f = 0 while f<n : print(f) f = f+1 print(n) n=int(input()) i=0 while i<=n: print(i) i+=1

Python 기초 100제 | 6076번 [내부링크]

문제 설명 정수(0 ~ 100) 1개를 입력받아 0부터 그 수까지 순서대로 출력해보자. 예시 n = int(input()) for i in range(n+1) : print(i) 참고 range(n) 은 0, 1, 2, ... , n-2, n-1 까지의 수열을 의미한다. 예를 들어 range(3) 은 0, 1, 2 인 수열을 의미한다. for i in range(n) : #range(n)에 들어있는(in) 각각의 수에 대해서(for) 순서대로 i에 저장해 가면서... 이때의 for는 각각의 값에 대하여... 라는 for each 의 의미를 가진다고 생각할 수 있다. range(끝) range(시작, 끝) range(시작, 끝, 증감) 형태로 수열을 표현할 수 있다. 시작 수는 포함이고, 끝 수는 포함되지 않는다. [시작, 끝) 증감할 수를 작성하지 않으면 +1이 된다. 반복 실행구조에 반복 횟수를 기록/저장하는 변수로 i를 자주 사용하는데, i 는 반복자(iterator)를 나타내는

Python 기초 100제 | 6077번 [내부링크]

문제 설명 정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자. 예시 #다음 코드는 홀 수만 더해 출력한다. n = int(input()) s = 0 for i in range(1, n+1) : if i%2==1 : s += i print(s) 참고 while 이나 for 반복실행구조를 이용할 수 있다. 다른 방법이나 while 반복실행구조를 이용해서도 성공시켜 보자. 입력 정수 1개가 입력된다. (0 ~ 100) 출력 1부터 그 수까지 짝수만 합해 출력한다. 풀이 n = int(input()) t=0 for m in range(n+1) : if m%2 == 0 : t = t+m print(t)

Python 기초 100제 | 6063번 [내부링크]

문제 설명 입력된 두 정수(a, b) 중 큰 값을 출력하는 프로그램을 작성해보자. 단, 3항 연산을 사용한다. 예시 a, b = input().split() a = int(a) #변수 a에 저장되어있는 값을 정수로 바꾸어 다시 변수 a에 저장 b = int(b) c = (a if (a>=b) else b) print(int(c)) 참고 3개의 요소로 이루어지는 3항 연산은 "x if C else y" 의 형태로 작성이 된다. - C : True 또는 False 를 평가할 조건식(conditional expression) 또는 값 - x : C의 평가 결과가 True 일 때 사용할 값 - y : C의 평가 결과가 True 가 아닐 때 사용할 값 조건식 또는 값이 True 이면 x 값이 사용되고, True가 아니면 y 값이 사용되도록 하는 코드이다. 예를 들어 0 if 123>456 else 1 과 같은 표현식의 평가값은 123 > 456 의 비교연산 결과가 False 이므로 1이 된다

Python 기초 100제 | 6064번 [내부링크]

문제 설명 입력된 세 정수 a, b, c 중 가장 작은 값을 출력하는 프로그램을 작성해보자. 단, 3항 연산을 사용한다. 참고 프로그래밍언어 소스코드 작성시 모든 요소들은 "순서에 따라 한 단계씩 실행" "미리 정해진 순서에 따라 하나씩 연산 수행" "그 때까지 연산된 결과를 이용해 다시 순서에 따라 하나씩 연산" ... 등의 원리가 적용된다. 따라서 3항 연산을 중첩해(괄호로 묶는 등..) 이용하면 여러 값들을 순서대로 비교해 가장 큰/작은 값을 계산할 수 있다. 예를 들어 (a if a>b else b) if ((a if a>b else b)>c) else c 와 같은 계산식은 a, b, c 의 값 중 가장 큰 값으로 계산된다. 잘 이해가 되지 않는다면 어떤 순서에 따라 계산될 지 생각해보고 여러 가지 연산자가 동시에 사용된 식이 있을 때, 어떤 우선순위에 따라 순서대로 계산이 되는지 찾아보도록 한다. “연산자 우선순위”를 검색하면 우선순위와 결합방향이 나온다. 예를 들어 변수에

Python 기초 100제 | 6065번 [내부링크]

문제 설명 3개의 정수(a, b, c)가 입력되었을 때, 짝수만 출력해보자. 예시 a, b, c = input().split() a = int(a) b = int(b) c = int(c) if a%2==0 : #논리적으로 한 단위로 처리해야하는 경우 콜론(:)을 찍고, 들여쓰기로 작성 한다. print(a) if b%2==0 : print(b) if c%2==0 : print(c) 참고 if 조건식 : 실행1 #조건식의 평가값이 True 인 경우 실행시킬 명령을 들여쓰기를 이용해 순서대로 작성한다. 실행2 실행3 #들여쓰기를 하지 않은 부분은 조건식에 상관이 없음 python 에서는 논리적 실행단위인 코드블록(code block)을 표현하기 위해 들여쓰기를 사용한다. 들여쓰기 방법은 탭(tab), 공백(space) 4개 등 여러 가지 방법을 사용할 수 있지만 한 소스코드 내에서 들여쓰기 길이와 방법은 똑같아야 한다. a%2==0 은 (a%2)가 먼저 계산된 후 그 결과를 정수 0과

Bandit Level 0 [내부링크]

Level 0. ssh를 사용하여 게임에 로그인 하라. 연결해야 하는 호스트는 포트 2220의 bandit.labs.overthewire.org이다. 사용자 이름은 bandit0이고 암호는 bandit0이다. 리눅스 워게임인 Bandit을 풀기 위해 VMware에 리눅스를 설치하였다. SSH란? Secure Shell의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜이다. 주어진 호스트 접속을 위해 ssh명령어를 사용하였다. ssh 사용자이름@호스트이름 -p 포트 형식으로 작성하였고, -p 옵션을 사용하여 연결할 포트(2220)를 지정해주었다. 그 후 패스워드를 입력하라는 문구가 나오는데, bandit0을 입력해주면 위와 같은 창이 뜨며 접속이 완료된다. SSH로 처음 접속하면 암호화 기법인 RSA를 사용한 인증 키를 생성할 것인지 물어보는데, 이 때 'yes'를 입력하면 접속된다. 인증키가 등록된 후에는 다시 접속할 때 SSH 인증 키를 생성할 것인지 묻지 않는다.

Bandit Level 0 → Level 1 [내부링크]

Bandit Level 0 → Level 1. 파일에 저장된 암호를 찾아라. 암호는 홈 디렉터리에 있는 'readme' 파일에 저장되어 있다. bandit1에 로그인 할 때 필요한 암호이다. 암호를 찾을 때마다 SSH를 사용하여 해당 레벨에 로그인하여 문제를 풀어야한다. ls 명령어를 사용하여 홈디렉터리 안에 있는 내용을 출력하도록 하였다. 홈디렉터리 안에 'readme' 파일이 있는 것을 확인 하였고, cat 명령어를 사용하여 파일 내용을 출력하였다. NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL ls : list라는 뜻으로, 디렉터리의 내용을 출력할 때 사용하는 명령어이다. 형식 ls [옵션] [디렉터리(파일)] 옵션 -a: 숨김 파일을 포함하여 모든 파일의 목록을 출력한다. -d 디렉터리 자체의 정보를 출력한다. -i: 첫 번째 행에 inode 번호를 출력한다. -l: 파일의 상세 정보를 출력한다. -A: .(마침표)와 ..(마침표 두 개)를 제외한 모든 파일 목록

Bandit Level 1 → Level 2 [내부링크]

Bandit Level 1 → Level 2. 파일에 저장된 암호를 찾아라. 암호는 홈 디렉터리에 있는 '-' 파일에 저장되어 있다. bandit0에서 bandit1로 로그인 할 때는 exit 명령어를 사용하여 로그아웃 한 후 다시 로그인 해야한다. bandit1 로그인 정보는 아래와 같다. 명령어: ssh [email protected] -p 2220 passward: NH2SXQwcBdpmTEzi3bvBHMM9H66vVXjL ls 명령어를 사용했을 때 '-' 파일이 존재한다고 출력된다. 하지만 전 단계와 같이 cat [파일]로는 파일의 내용을 출력할 수 없다. 아마 옵션에서 사용하는 '-' 때문에 파일 이름으로 인식하지 못하는 것 같다. 그렇기에 find -name 을 통해 '-' 파일의 상대경로인 ./-를 알아내고 cat 명령어로 파일 내용을 출력하였다. 절대경로로도 가능하기 때문에 cat /home/bandit1/- 라고 적어도 출력 가능하다.

Bandit Level 2 → Level 3 [내부링크]

Bandit Level 2 → Level 3. 파일에 저장된 암호를 찾아라. 암호는 홈 디렉터리에 있는 'spaces in this filename' 파일에 저장되어 있다. bandit2 로그인 정보는 아래와 같다. 명령어: ssh [email protected] -p 2220 passward: rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi ls 명령어를 사용했을 때 'spaces in this filename' 파일이 존재한다고 출력된다. (가급적 파일이나 디렉터리 이름에 공백을 사용하지 않는 것이 좋다는 이유를 알겠다.) 우선 cat 명령어에 공백이 포함된 파일 이름을 넣으면 공백 단위로 나눠져 각각 다른 파일로 인식한다. 그러므로 파일 이름 안의 공백을 공백으로만 인식하게끔 만들어줘야하는데 그 방법이 공백 앞에 \(역슬래시)를 넣는 것이다. 그럼 오직 공백으로만 인식하게 되고 'spaces in this filename' 파일의 내용

Bandit Level 3 → Level 4 [내부링크]

Bandit Level 3→ Level 4. 숨겨진 파일에 저장된 암호를 찾아라. 암호는 'inhere' 디렉터리에 있는 숨겨진 파일에 저장되어 있다. bandit3 로그인 정보는 아래와 같다. 명령어: ssh [email protected] -p 2220 passward: aBZ0W5EmUfAf7kHTQeOwd8bauFJ2lAiG 홈 디렉터리에서 ls 명령어를 사용하여 파일 안에 무엇이 있는지 확인한다. 문제에 적혀있는 대로 'inhere' 디렉터리가 존재한다. cd 명령어를 통해 'inhere' 디렉터리로 이동하였다. 디렉터리 안에 숨겨진 파일이 있는지 확인하기 위해 ls -a를 사용하였다. 숨겨진 파일이므로 파일 이름 앞에는 .(마침표)가 표시되어있다. 파일 내용을 출력하는 cat 명령어를 사용하였고 숨겨진 파일을 표시하는 .(마침표)를 파일 이름 앞에 앞에 붙여주어 내용을 출력할 수 있도록 하였다. 2EW7BBsr6aMMoJ2HjW067dm8E

Bandit Level 4 → Level 5 [내부링크]

Bandit Level 4→ Level 5. 파일에 저장된 암호를 찾아라. 암호는 'inhere' 디렉터리에 있는 사람이 읽을 수 있는 파일에 저장되어 있다. bandit4 로그인 정보는 아래와 같다. 명령어: ssh [email protected] -p 2220 passward: 2EW7BBsr6aMMoJ2HjW067dm8EgX26xNe 홈 디렉터리에서 ls 명령어를 사용하니 'inhere' 디렉터리가 존재한다고 나왔다. 사람이 읽을 수 있는 파일에 암호가 저장되어 있다고 하여 ls -l을 사용하여 파일들을 살펴보았다. 10개의 파일들이 존재한다. 사람이 읽을 수 없는 파일은 이렇게 내용이 출력된다. 10개의 파일을 cat 명령어로 하나하나 출력해보는 것은 번거로우니 file 명령어를 사용하여 파일의 종류를 확인하였다. '-file07' 파일이 ASCII코드를 사용하는 텍스트 파일이라고 나와있다. '-file07' 파일의 내용을 출력하여 암호를 알아

Char [내부링크]

먼저 기본 자료형 표이다. (자료형 별 크기는 운영체제나 컴파일러마다 차이가 있다.) 자료형 크기 값의 표현범위 정수형 char 1바이트 -128이상 +127이하 short 2바이트 -32,768이상 +32,767이하 int 4바이트 -2,147,483,648이상 +2,147,483,647이하 long 4바이트 -2,147,483,648이상 +2,147,483,647이하 long long 8바이트 -9,223,372,036,854,775,808이상 -9,223,372,036,854,775,807이하 실수형 float 4바이트 ±3.4×10^(-37)이상 ±3.4×10^(+38)이하 double 8바이트 ±1.7×10^(-307)이상 ±1.7×10^(+308)이하 long double 8바이트 이상 double 이상의 표현범위 이 중 1바이트 크기의 char에 대해 적을 것이다. Char character의 약자이며, 8비트(1바이트) 정수 자료형 중 하나이다. 문자를 표현하기에 적합

스타벅스, 크리덴셜 스터핑 공격으로 일부 회원 계정정보 유출... 충전금 결제 도용까지 [내부링크]

https://www.boannews.com/media/view.asp?idx=120154 스타벅스, 크리덴셜 스터핑 공격으로 일부 회원 계정정보 유출... 충전금 결제 도용까지 스타벅스코리아(이하 스타벅스)에서 일부 고객의 계정정보가 유출돼 해외 IP를 통해 애플리케이션에 부정 로그인이 시도된 것으로 알려졌다. 특히, 로그인에 성공한 일부 계정을 통해서는 충전금 결제를 도용하기까지 했다. www.boannews.com 작성 2023.07.15 크리데셜 스터핑이 발생하는이유 사용자들이 여러 사이트에 같은 크리덴셜(특히 패스워드)을 사용하고 있기 때문 크리덴셜 스터핑 공격은 일반적으로 봇이나 자동화된 툴을 사용해 감염된 인증 정보로 사이트에 접속하기 위해 반복적으로 시도함. 로그인에 성공하면 계정을 탈취하여 금전적 이득을 취하거나 다크 웹에서 다른 범죄자에게 검증된 인증정보를 판매할 수도 있음. 크리덴셜 스터핑 징조 크리덴셜 스터핑 공격은 보통 자동화 기술을 수반하는데, 1. 제한된

EOF [내부링크]

EOF End Of File, 즉 파일의 끝을 의미한다. 더 이상 읽을 데이터가 없다는 뜻이며, 데이터의 입력이 없을 때 실행을 끝내기 위해 사용된다. stdio.h 헤더 파일에 정의된 상수로, 일반적으로 -1로 정의된다. 백준 10951번 소스코드 #include <stdio.h> int main(void) { int a, b; while (scanf_s("%d %d", &a, &b) != EOF) // scnaf_s가 EOF가 아닌 값을 반환하는 동안 반복문 실행 { int sum = a + b; printf("%d\n", sum); } return 0; } 1 1 2 2 3 5 ^Z ^Z ^Z EOR 실행방법 입력을 중단하는 특정 입력 시그널(Ctrl+D 또는 Ctrl+Z)을 사용한다. (VS 사용) Ctrl+Z 누른 후 Enter 키를 누른다.(3회) (DEV-C++) Ctrl+Z 누른 후 Enter 키를 누른다.(1회) EOR과 Ctrl+C와의 차이점 EOR: 프로그램이 파

피보나치 수열 [내부링크]

피보나치 수열이란 처음 두 항을 1과 1로 한 후, 그 다음 항부터는 바로 앞의 두 개의 항을 더해 만드는 수열을 말한다. 그러므로 피보나치 수열의 처음 몇 개의 항은 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ⋯ 이다. 이 수열에 속한 수를 피보나치 수라고 한다. 네이버 지식백과 #include <stdio.h> void Fibonacci(int); // 피보나치 수열 구하는 함수 선언 int main(void) { int num; printf("출력할 피보나치 수열의 개수를 입력하시오: "); scanf_s("%d", &num); Fibonacci(num); // 함수 호출 return 0; } void Fibonacci(int num) // 피보나치 수열 구하는 함수 정의 { int num1 = 0, num2 = 1, num3; int i; if (num == 1) printf("%d", num1); // num이 1일 때, '0' 출력 else { print

지역변수 [내부링크]

변수는 선언되는 위치에 따라서 크게 '전역변수'와 '지역변수'로 나뉜다. 그리고 이 둘은 다음 두가지에 대해서 차이점을 보인다. - 메모리상에 존재하는 기간 - 변수에 접근할 수 있는 범위 함수 내에만 존재 및 접근 가능한 지역변수(Local Variable) '지역변수'에서 말하는 '지역'이란 중괄호에 의해 형성되는 영역을 의미 중괄호 내에 선언되는 변수는 모두 지역변수 함수를 빠져나가기 직전까지만 유효하기 때문에 해당 함수를 벗어나면 자동으로 소멸 따라서 다른 함수 내에서 이름이 같은 변수가 있더라도 문제되지 않음 #include <stdio.h> int SimpleFuncOne(void) { int num = 10; // 이후부터 SimpleFuncOne의 num 유효 num++; printf("SimpleFuncOne num: %d \n", num); return 0; // SimpleFuncOne의 num이 유효한 마지막 문장 } int SimpleFuncTwo(void)

전역변수 [내부링크]

변수는 선언되는 위치에 따라서 크게 '전역변수'와 '지역변수'로 나뉜다. 그리고 이 둘은 다음 두가지에 대해서 차이점을 보인다. - 메모리상에 존재하는 기간 - 변수에 접근할 수 있는 범위 전역변수(Global Variable) - 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재 - 별도의 값으로 초기화하지 않으면 0으로 초기화 - 프로그램 전체 영역 어디서든 접근이 가능함 #include <stdio.h> void Add(int val); int num; // 전역변수는 기본 0으로 초기화됨 int main(void) { printf("num: %d \n", num); Add(3); printf("num: %d \n", num); num++; // 전역변수 num의 값 1 증가 printf("num: %d \n", num); return 0; } void Add(int val) { num += val; // 전역변수 num의 값이 val만큼 증가 } num: 0

변수의 가려짐 [내부링크]

지역변수 #include <stdio.h> int main(void) { int num = 1; if (num == 1) { int num = 7; // num += 10; printf("if문 내 지역변수 num: %d \n", num); } printf("main 함수 내 지역변수 num: %d \n", num); return 0; } if문 내 지역변수 num: 17 main 함수 내 지역변수 num: 1 동일한 변수의 이름을 사용하였을 때, 지역변수는 외부에 선언된 동일한 이름의 변수를 가리게 된다. 즉 위 코드에서 if내에서는 main 함수의 num이 가려진다. (int num = 7; 을 주석처리하면 if문에서 접근하는 num은 main 함수의 num이 되고 결과는 11, 11이 나오게 된다.) 지역변수와 전역변수 #include <stdio.h> int Add(int val); int num = 1; int main(void) { int num = 5; printf("

static 변수 [내부링크]

지역변수에 static 선언 추가하기 - 선언된 함수 내에서만 접근이 가능 (지역변수 특성) - 딱 1회 초기화화되고 프로그램 종료 시까지 메모리 공간에 존재 (전역변수 특성) #include <stdio.h> void SimpleFunc(void) { static int num1 = 0; // 초기화하지 않으면 0 초기화 int num2 = 0; // 초기화하지 않으면 쓰레기 값 초기화 num1++, num2++; printf("static: %d, local: %d \n", num1, num2); } int main(void) { int i; for (i = 0; i < 3; i++) SimpleFunc(); return 0; } static: 1, local: 1 static: 2, local: 1 static: 3, local: 1 static int num1 = 0; 를 살펴보면 아래와 같다. (전역변수 특성) 초기화하지 않으면 전역변수처럼 0으로 초기화된다. 프로그램 시작

재귀함수 [내부링크]

재귀함수: 함수 내에서 자기 자신을 다시 호출하는 함수 void Recursive(void) { printf("Recursive call! \n"); Recursive(); // 나 자신을 재호출한다. } 함수를 호출함으로써 재진입한다고 생각해도 좋지만, Recurisive 함수가 호출되면, Recurisive 함수의 복사본을 만들어서, 본사본이 실행되는 구조라고 생각하자! ex) 최대공약수 구하는 프로그램 #include <stdio.h> int GCD(int, int); int main(void) { int num1, num2; printf("두 개의 정수를 입력하시오: "); scanf_s("%d %d", &num1, &num2); printf("%d \n", GCD(num1, num2)); return 0; } int GCD(int num1, int num2) { if (num2 == 0) { return num1; } else { return GCD(num2, num1 %

const 상수 [내부링크]

이름을 지니는 심볼릭(Symbolic) 상수: const 상수 심볼릭 상수는 변수와 마찬가지로 이름을 지니는 상수 심볼릭 상수를 표현하는 방법 1. const 키워드 사용 2. 매크로 이용 int main(void) { const int MAX = 100; // MAX는 상수! 따라서 값의 변경 불가! const double PI = 3.1415; // PI는 상수! 따라서 값의 변경 불가! } 변수 선언시 cosnt 선언 추가 상수이므로 선언과 동시에 초기화 해야함. int main(void) { const int MAX; // 쓰레기 값으로 초기화 되어버림 MAX = 100; // 값의 변경 불가! 따라서 컴파일 에러 발생! } 초기화되면 그 값을 변경시킬 수 없다. 선언과 초기화 분리 불가 변수와 상수의 구분 상수의 이름은 모두 대문자로 표시하고, 둘 이상의 단어로 연결할 때는 MY_AGE와 같이 언더바를 이용해서 두 단어를 구분하는 것이 관례 ※ 열혈 C 프로그래밍 교재를 참

Dreamhack | devtools-sources [내부링크]

개발자 도구의 Sources 탭 기능을 활용해 플래그를 찾아보자. 플래그 형식은 DH{…} 입니다. 문제에 나와있는 파일을 다운 받고 압축 해제 시켰다. 여러 파일들로 구성되어있다. VS Code를 이용하여 html 파일을 열었다. 마우스 오른쪽 클릭 후 'Open with Live Server' 클릭했다. 웹페이지 모습이다. F12를 눌러 개발자 도구에 들어간다. Ctrl + Shift + F 를 눌러 문서 전체에서 검색한다. dh를 검색하면 플래그 값이 나온다. VS Code에서도 찾을 수 있다. Ctrl + Shift +F 를 눌러 dh를 검색한다. dh가 포함된 파일이 나온다. 파일을 누르면 플래그 값을 얻을 수 있다. DH{2ed07940b6fd9b0731ef698a5f0c065be9398f7fa00f03ed9da586c3ed1d54d5}

Web [내부링크]

웹(Web): 인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스 웹 서버(Web Server): 정보를 제공하는 주체 클라이언트(Web Client): 정보를 받는 이용자 HTTP: 웹상에서 서로 통신을 하기 위해 정해둔 일종의 규칙 프론트엔드(Front-end): 이용자의 요청을 받는 부분 백엔드(Back-end): 이용자의 요청을 처리하는 부분 웹 리소스(Web Resource): 웹에 갖춰진 정보 자산 http://numbbvi.com/index.html → numbbvi.com에 존재하는 /index.html 경로의 리소스를 가져와라! 모든 웹 리소스는 고유의 Uniform Resource Indicator(URI)를 가짐 - Hyper Text Markup Language(HTML): 웹 문서의 뼈와 살을 담당, 태그와 속성을 통한 구조화된 문서 작성 지원 - Cascading Style Sheets(CSS): 웹 문서의 생김새를 지정, 웹 리소

HTTP/HTTPS [내부링크]

통신 프로토콜 요청(Request): 클라이언트가 웹에게 특정 리소스를 지정하여 제공해달라고 요청하는 것 응답(Response): 서버가 해당 요청을 이해하고, 대응되는 동작을 통해 클라이언트에게 리소스를 반환하는 것 프로토콜(Protocol): 규격화된 상호작용에 적용되는 약속 (TCP/IP, HTTP, FTP 등) HTTP(Hyper Text Transfer Protocol): 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜 클라이언트가 서버에게 요청하면, 서버가 응답하는 것 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킴 이 포트는 일반적으로 TCP/80 또는 TCP/8080 네트워크 포트(Network Port): 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소 포트 ≒ 항구 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고, 서버가 클라이언트에 보낼 데이터를 실어서 돌려보내는... 서비스

Web Browser [내부링크]

웹 브라우저: 인터넷의 모든 서비스와 자료에 접근하는 일을 지원하는 프로그램 서버와 HTTP 통신을 하고, 수신한 리소스를 시각화 주소창에 numbbvi.com 입력 시, 1. 웹 브라우저의 주소창에 입력된 주소(numbbvi.com)를 해석 (URL 분석) 2. numbbvi.com에 해당하는 주소 탐색 (DNS 요청) 3. HTTP를 통해 numbbvi.com에 요청 (GET) 4. numbbvi.com의 HTTP 응답 수신 5. 리소스 다운로드 및 웹 렌더링 (HTML, CSS, Javascript) URL(Uniform Resource Locator): 웹에 있는 리소스의 위치를 표현하는 문자열 요소 설명 Scheme 웹 서버와 어떤 프로토콜로 통신할지 나타냄 Host Authority의 일부로, 접속할 웹 서버의 주소에 대한 정보를 가지고 있음 Port Authority의 일부로, 접속할 웹 서버의 포트에 대한 정보를 가지고 있음 Path 접근할 웹 서버의 리소스 경로로 '

개발자 도구 [내부링크]

개발자 도구 실행하기: 브라우저를 열고 F12를 누른다. 빨간색 요소 검사(Inspect) 및 디바이스 툴바(Device Toolbar) 주황색 기능을 선택하는 패널. Elements: 페이지를 구성하는 HTML 검사 Console: 자바 스크립트를 실행하고 결과를 확인할 수 있음 Sources: HTML, CSS, JS 등 페이지를 구성하는 리소스를 확인하고 디버깅할 수 있음 Network: 서버와 오가는 데이터를 확인할 수 있음 Performancd Memory Application: 쿠키를 포함하여 웹 어플리케이션과 관련된 데이터를 확인할 수 있음 Security Lighthouse 노란색 현재 페이지에서 발생한 에러 및 경고 메시지 초록색 개발자 도구 설정 Elements에서 HTML 수정하기: 코드를 선택한 상태로 단축키 F2를 누르거나 더블 클릭. Console: 프론트엔드의 자바스크립트 코드에서 발생한 각종 메시지를 출력하고, 이용자가 입력한 자바스크립트 코드를 실행해주

Python 기초 100제 | 6001번 [내부링크]

문제 설명 python 언어에서 가장 기본적인 명령이 출력문이다. print( )를 이용해 다음 단어를 출력하시오. Hello 참고 아래와 같은 소스 코드를 작성하고 실행시키면, 지정한 "문장"이 출력(print)된다. print("문장") 입력 입력 없음 출력 Hello 풀이 print("Hello")

Python 기초 100제 | 6002번 [내부링크]

문제 설명 이번에는 공백( )을 포함한 문장을 출력한다. 다음 문장을 출력해보자. Hello World (대소문자에 주의한다.) 참고 print("문장1 문장2") 을 실행시키면 "문장1”, "문장2"가 공백( )을 사이에 두고 출력된다. print("문장1", "문장2") 도 "문장1"과 "문장2" 사이에 공백( )을 출력한다. 입력 입력 없음 출력 Hello World 풀이 print("Hello World")

Python 기초 100제 | 6003번 [내부링크]

문제 설명 이번에는 줄을 바꿔 출력하는 출력문을 연습해보자. 다음과 같이 줄을 바꿔 출력해야 한다. Hello World (두 줄에 걸쳐 줄을 바꿔 출력) 예시 print("Hello") print("World") 참고 python의 기본 print( ) 를 이용해 출력하면 문장을 출력한 후 마지막에 줄을 바꾼다.(new line) 출력 후 줄을 바꾸는 대신 스페이스( ) 공백을 붙이도록 설정하는 방법도 있다. 입력 입력 없음 출력 Hello World 풀이 print("Hello") print("World") print("Hello\nWorld")

Python 기초 100제 | 6004번 [내부링크]

문제 설명 이번에는 작은 따옴표(')(single quotation mark)가 들어있는 출력문 연습을 해보자. 다음 문장을 출력하시오. 'Hello' 예시 print(" ' "); 입력 입력 없음 출력 'Hello' 풀이 print("'Hello'")

Python 기초 100제 | 6005번 [내부링크]

문제 설명 이번에는 큰따옴표(")(double quotation mark)가 포함된 출력문을 연습해보자. 다음 문장을 출력하시오. "Hello World" (단, 큰따옴표도 함께 출력한다.) 예시 print(' " '); 참고 python 언어에서 print( ) 로 출력할 문장을 표현할 때 큰 따옴표 기호(")로 묶어 표현한다. 따라서, 큰따옴표 기호 그 자체를 출력하기 위해서는 다른 방법을 사용해야한다. python 언어에서 문장(문자열)을 표현하는 기호로 "와 '를 쌍으로 묶어 사용할 수 있다. 따라서, 문장을 표현할 때 사용하는 큰따옴표("문장") 기호 대신 작은따옴표('문장')를 사용하면 큰따옴표를 출력할 수 있다. (물론, 큰따옴표를 출력하는 다른 방법도 있다.) 입력 입력 없음 출력 "Hello World" 풀이 print('"Hello World"') print("\"Hello World\"")

Python 기초 100제 | 6006번 [내부링크]

문제 설명 이번에는 특수문자 출력에 도전하자!! 다음 문장을 출력하시오. "!@#$%^&*()' (단, 큰따옴표와 작은따옴표도 함께 출력한다.) 출력 형식에 필요한 따옴표와 출력할 문자인 따옴표를 구분하기 위하여 \" 또는 \' 를 이용하여 출력할 수 있다. 입력 입력 없음 출력 "!@#$%^&*()' 풀이 print("\"!@#$%^&*()\'") print('"!@#$%^&*()\'')

Python 기초 100제 | 6007번 [내부링크]

문제 설명 윈도우 운영체제의 파일 경로를 출력하는 연습을 해보자. 파일 경로에는 특수문자들이 포함된다. 다음 경로를 출력하시오. "C:\Download\'hello'.py" (단, 따옴표도 함께 출력한다.) \도 안전하게 출력하려면 \\를 사용하는 것이 좋다. 입력 입력 없음 출력 "C:\Download\'hello'.py" 풀이 print("\"C:\\Download\\\'hello\'.py\"")

Python 기초 100제 | 6008번 [내부링크]

문제 설명 이번에는 줄을 바꿔 출력하는 출력문을 연습해보자. 다음과 같이 줄을 바꿔 출력해야 한다. Hello World (두 줄에 걸쳐 줄을 바꿔 출력) 예시 print("Hello") print("World") 참고 python의 기본 print( ) 를 이용해 출력하면 문장을 출력한 후 마지막에 줄을 바꾼다.(new line) 출력 후 줄을 바꾸는 대신 스페이스( ) 공백을 붙이도록 설정하는 방법도 출력문 연습의 마지막 문제이다. (생각과 시도를 많이 해야하는 문제들은 한 두 문제씩 넘겼다가 나중에 풀어보면 된다.) 이번에는 다음과 같은 python프로그램의 소스코드를 출력해보자. print("Hello\nWorld") 위 코드를 정확히 그대로 출력하시오.(공백문자 주의) print 명령 안에 서식 문자로 \n을 사용하면 줄 바꿈(new line) 문자로 사용된다. 그렇다면 \n을 화면에 그대로 출력하려면 어떻게 해야될까? 입력 입력 없음 출력 print("Hello\nWorl

Python 기초 100제 | 6009번 [내부링크]

문제 설명 문자(character)는 0~9, a~z, A~Z, !, @, #, {, [, <, ... 과 같이 길이가 1인 기호라고 할 수 있다. 변수에 문자 1개를 저장한 후 변수에 저장되어 있는 문자를 그대로 출력해보자. 예시 c = input() print(c) 와 같은 형태로 가능하다. 참고 input() 을 사용하면 키보드로 입력한 값을 가져온다. 변수 = input() 를 실행시키면 키보드로 입력한 값을 왼쪽의 변수에 저장한다. 변수(variable)는 어떤 값(정수, 실수, 문자, 문자열 등)을 저장할 수 있는 공간의 별명이라고 할 수 있다. 어떤 값을 저장했다가 다시 사용하기 위해서 변수를 사용한다. 저장할 내용들이 많으면 필요한 만큼 변수를 만들어 사용하면 된다. 변수는 포스트 잇과 같은 메모지에 필요한 내용을 적어두었다가, 필요할 때 찾아 살펴보는 것과 비슷하다. 대수학(algebra)에서는 어떤 수나 값을 대신해 문자로 표현하는 방법을 사용한다. 프로그래밍언어에

Python 기초 100제 | 6010번 [내부링크]

문제 설명 정수(integer)는 양의 정수(1, 2, 3, 4, 5, ...), 음의 정수(-1, -2, -3, -4, -5, ...), 0 과 같이 소숫점 아래에 수가 없는 수라고 할 수 있다. 변수에 정수값을 저장한 후 정수로 변환하여 출력해보자. 예시 n = input() n = int(n) print(n) 와 같은 형태로 가능하다. 참고 input() 을 사용하면 키보드로 입력(input)한 값을 가져온다. 변수 = input() 를 실행시키면 키보드로 입력한 값을 왼쪽의 변수에 저장(할당, asign) 한다. 변수는 어떤 값(정수, 실수, 문자, 문자열 등)을 저장할 수 있는 공간의 별명이라고 할 수 있다. 변수는 일반적으로 알파벳(a~z, A~Z)이나 언더라인 '_'으로 시작하는 단어를 사용하고, 숫자(0~9)로 시작하는 단어는 사용할 수 없다. 숫자로 시작하는 단어는 수로 인식하기 때문이다. (python의 경우 한글 변수도 사용할 수 있지만, 영문을 사용하는 것이 예

Python 기초 100제 | 6011번 [내부링크]

문제 설명 숫자(0~9)와 소수점(.)을 사용해 표현한 수를 실수(real number)라고 한다. 변수에 실수값을 저장한 후 변수에 저장되어 있는 값을 그대로 출력해보자. 예시 f = input() f = float(f) print(f) 와 같은 형태로 가능하다. 참고 어떤 값을 1개 입력받아 계산하거나 처리해야하는 경우라면, 입력되는 값이 수인지 문자열인지 구분해야한다. 조금 생각해보면, 키보드로 입력한 9라는 값이 문자 9인지, 정수 9인지, 실수 9.0인지 컴퓨터가 스스로 구분하지 못한다는 것을 알 수 있다. 컴퓨터 내부에서는 2진 체계의 디지털 형태로만 저장할 수 있기 때문에 정수, 문자, 실수 등의 저장 방법이 다르다. 입력한 값을 원하는 형태로 계산하거나 처리하기 위해서는 입력한 값이 어떤 데이터(정수, 문자, 실수, 문자열 등)인지 명확히 구분해 주어야 한다. 입력 실수 1개가 입력된다. 1개가 입력된다. 출력 입력된 수를 실수로 변환하여 출력한다. 풀이 n = inp

Python 기초 100제 | 6012번 [내부링크]

문제 설명 줄을 바꿔 정수(integer) 2개를 입력받아 줄을 바꿔 출력해보자. 예시 a = input() b = input() a=int(a) b=int(b) print(a) print(b) 과 같은 방법으로 가능하다. 입력 2개의 정수가 줄을 바꿔 입력된다. 출력 입력된 두 정수를 줄을 바꿔 출력한다. 풀이 a = input() b = input() a = int(a) b = int(b) print(a) print(b) a=input() b=input() print(a) print(b)

Python 기초 100제 | 6013번 [내부링크]

문제 설명 줄을 바꿔 문자(character) 2개를 입력받고, 순서를 바꿔 한 줄씩 출력해보자. 입력 2개의 문자가 줄을 바꿔 입력된다. 출력 순서를 바꿔 한 줄에 한 문자씩 출력한다. 풀이 a = input() b = input() print(b) print(a) a = input() b = input() a = str(a) b = str(b) print(b) print(a)

Python 기초 100제 | 6014번 [내부링크]

문제 설명 실수(real number) 1개를 입력받아 줄을 바꿔 3번 출력해보자. 예시 ... print(f) #f에 저장되어있는 값을 출력하고 줄을 바꾼다. print(f) print(f) 와 같은 방법으로 3번 줄을 바꿔 출력할 수 있다. 참고 python 코드 사이에 설명(주석)을 작성해 넣고 싶은 경우 샵('#') 기호를 사용하면 된다. #가 시작된 위치부터 그 줄을 마지막까지는 python 인터프리터에 의해서 실행되지 않는다. 소스코드 부분 부분에 설명, 내용, 표시를 한 줄 설명으로 넣을 경우에 편리하게 사용할 수 있다. 여러 줄로 설명을 넣는 방법도 있다. 스스로 찾아보자! 입력 실수 1개가 입력된다. 출력 입력받은 실수를 줄을 바꿔 3번 출력한다. 풀이 n = input() n = float(n) print(n) print(n) print(n)

Python 기초 100제 | 6015번 [내부링크]

문제 설명 공백을 두고 입력된정수(integer) 2개를 입력받아 줄을 바꿔 출력해보자. 예시 a, b = input().split() a=int(a) b=int(b) print(a) print(b) 과 같은 방법으로 두 정수를 입력받아 출력할 수 있다. 참고 python의 input()은 한 줄 단위로 입력을 받는다. input().split() 를 사용하면, 공백을 기준으로 입력된 값들을 나누어(split) 자른다. a, b = 1, 2 를 실행하면, a에는 1 b에는 2가 저장된다. (주의 : 하지만, 다른 일반적인 프로그래밍언어에서는 이러한 방법을 지원하지 않기 때문에 a=1, b=2 를 한 번에 하나씩 따로 실행시켜야 한다.) 입력 2개의 정수가 공백으로 구분되어 입력된다. 출력 입력된 두 정수를 줄을 바꿔 출력한다. 풀이 a, b = input().split() a = int(a) b = int(b) print(a) print(b)

Python 기초 100제 | 6016번 [내부링크]

문제 설명 공백을 두고 문자(character) 2개를 입력받아 순서를 바꿔 출력해보자. 참고 ... print(c2, c1) 와 같은 방법으로 출력하면, c1과 c2에 저장된 값이 공백을 두고 순서가 바뀌어 한 줄로 출력된다. print( ) 안에서 쉼표(,)를 찍어 순서대로 나열하면, 그 순서대로 공백을 두고 출력된다. 입력 2개의 문자가 공백으로 구분되어 입력된다. 출력 2개의 문자를 순서를 바꿔 한 줄로 출력한다. 풀이 c1, c2 = input().split() c1 = str(c1) c2 = str(c2) print(c2, c1)

Python 기초 100제 | 6017번 [내부링크]

문제 설명 정수(integer), 실수, 문자(character), 문자열(string) 등 1개만 입력받아 한 줄로 3번 출력해보자. 예시 s = input() print(s, s, s) #공백으로 구분해 한 줄로 출력한다. 와 같은 방법으로 3번 출력할 수 있다. 참고 python 언어에서는 문자/정수/실수/문자열 등 특별한 구분이 없이도 원하는 변수에 저장시켜 출력 할 수 있다. 하지만, 저장된 값을 이용해 계산하거나 서로 붙여 연결시키거나 잘라내는 작업을 한다면? 반드시 저장되어있는 값의 종류(문자/정수/실수/문자열 등)를 구분해 주어야 한다. 입력 1개의 데이터가 입력된다. 출력 공백을 두고 3번 출력한다. 풀이 c = input() c = str(c) print(c, c, c)

Python 기초 100제 | 6018번 [내부링크]

문제 설명 변수(variable)는 어떤 값(정수, 실수, 문자, 문자열 등)을 저장할 수 있는 공간의 별명이라고 할 수 있다. 어떤 값을 저장했다가 다시 사용하기 위해서 변수를 사용한다. 저장할 내용들이 많으면 필요한 만큼 변수를 만들어 사용하면 된다. 변수는 포스트 잇과 같은 메모지에 필요한 내용을 적어두었다가, 필요할 때 찾아 살펴보는 것과 비슷하다. 대수학(algebra)에서는 어떤 수나 값을 대신해 문자로 표현하는 방법을 사용한다. 프로그래밍언어에서도 마찬가지로 자신이 알아보기 쉬운 짧은 단어를 사용하는 것이 좋다. 예시) y = x + 24시간 시:분 형식으로 시간이 입력될 때, 그대로 출력하는 연습을 해보자. 예시 a, b = input().split(':') print(a, b, sep=':') 와 같은 방법으로 가능하다. 참고 input().split(':') 를 사용하면 콜론 ':' 기호를 기준으로 자른다. print(?, ?, sep=':') 를 사용하면 콜론 '

Python 기초 100제 | 6019번 [내부링크]

문제 설명 "연도.월.일"을 입력받아 "일-월-연도" 순서로 바꿔 출력해보자. 참고 y, m, d = input().split('.') 과 같이 변수들을 순서대로 나열하면 구분기호를 기준으로 잘라 순서대로 저장한다. 입력 연도, 월, 일이 닷('.')으로 구분되어 입력된다. 출력 대시(마이너스 기호)를 구분기호로 사용해서 일-월-연도로 바꿔 출력한다. 풀이 a, b, c = input().split(sep='.') a = int(a) b = int(b) c = int(c) print(c, b, a, sep='-')

Python 기초 100제 | 6020번 [내부링크]

문제 설명 주민번호는 다음과 같이 구성된다. XXXXXX-XXXXXXX 왼쪽 6자리는 생년월일(YYMMDD)이고, 오른쪽 7자리는 성별,출생지역,확인코드로 구성되어있다. 주민번호를 입력받아 형태를 바꿔 출력해보자. 입력 주민번호 앞 6자리와 뒷 7자리가 '-'로 구분되어 입력된다. (입력값은 가상의 주민번호이다.) ex)110011-0000000 출력 '-'를 제외한 주민번호 13자리를 모두 붙여 출력한다. 참고 아무것도 없는 공(empty) 문자는 작은 따옴표(') 2개를 붙여서 '' 로 표현한다. 풀이 n1, n2 = input().split(sep='-') print(n1, n2, sep='')

Python 기초 100제 | 6021번 [내부링크]

문제 설명 알파벳과 숫자로 이루어진 단어 1개가 입력된다. 입력받은 단어의 각 문자를 한 줄에 한 문자씩 분리해 출력한다. 예시 s = input() print(s[0]) print(s[1]) ... 참고 s[0] 은 첫 번째 문자를 의미한다. 입력 5개의 문자로 이루어진 단어 1개가 입력된다. 출력 각 문자를 한 줄에 한 문자씩 줄을 바꿔 출력한다. 풀이 s = str(input()) print(s[0]) print(s[1]) print(s[2]) print(s[3]) print(s[4])

Python 기초 100제 | 6022번 [내부링크]

문제 설명 6자리의 연월일(YYMMDD)을 입력받아 나누어 출력해보자. 참고 s = input() print(s[0:2]) 를 실행하면 0번째 문자부터 1번째 문자까지 잘라 출력한다. s[a:b] 라고 하면, s라는 단어에서 a번째 문자부터 b-1번째 문자까지 잘라낸 부분을 의미한다. 다른 자르기 방법도 있다. 입력 6자리 숫자로 이루어진 연월일(YYMMDD)이 입력된다. 출력 년도(YY) 월(MM) 일(DD)을 공백으로 구분해 한 줄로 출력한다. 풀이 s = str(input()) print(s[0:2], s[2:4], s[4:6])

Python 기초 100제 | 6023번 [내부링크]

문제 설명 시:분:초 형식으로 시간이 입력될 때 분만 출력해보자. 어떻게 분만 출력해야 할지 주의 깊게 생각해야한다. 입력 시 분 초가 시:분:초 형식으로 입력된다. 출력 분만 출력한다. 풀이 a, b, c = input().split(sep=':') print(b) 위 코드에서 주의할 점 "시분초"를 입력했기에 a, b, c를 정수(int)로 설정하면 "분"을 00으로 입력하였을 때 숫자로 인식하여 0이 출력된다. (ex\ 17:00:57 입력시 0이 출력됨) 따라서 이 경우에는 자료형을 따로 설정하지 않는 것이 옳다. (※ input 함수는 키보드로 입력한 값을 문자열로 리턴해주는 함수)

Python 기초 100제 | 6024번 [내부링크]

문제 설명 알파벳 문자와 숫자로 이루어진 단어 2개를 입력받아 순서대로 붙여 출력하는 프로그램을 작성해보자. 예시 w1, w2 = input().split() s = w1 + w2 print(s) 참고 단어는 문자(character)들로 만든다. 문자들로 구성된 문장을 문자열(string)이라고 부른다. 문자열에는 공백문자(' ')가 포함될 수 있는데, 문자 1개는 길이가 1인 문자열이라고 할 수 있고, 공백문자(' ')가 없는 문자열은 단어(word)라고 할 수 있다. 일반적인 문장들은 공백으로 구분된 단어들로 만들어지기 때문에, 공백문자로 구분된 문장에서 단어를 잘라내기 위해서는 공백문자(' ')를 기준으로 자르면 된다. 키보드로 입력되는 것들은 기본적으로 문자열로 인식되고, 문자열끼리 더하기(+)를 실행하면, 두 문자열을 합쳐 연결한(concatenate) 결과를 만들어 낸다. 입력 알파벳과 숫자로 이루어진 2개의 단어가 공백으로 구분되어 입력된다. 출력 입력된 2개의 단어를

Python 기초 100제 | 6025번 [내부링크]

문제 설명 정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. 예시 a, b = input().split() c = int(a) + int(b) print(c) 참고 입력되는 값은 기본적으로 문자열로 인식된다. 문자열 + 문자열은 두 문자열을 합친 문자열을 만든다. 숫자로 구성된 문자열이나 실수를 정수(integer) 값으로 바꾸기 위해서는 int( ) 를 사용할 수 있다. 수 + 수의 결과는 합(addition)이 계산된다. 입력 2개의 정수가 공백으로 구분되어 입력된다. 출력 두 정수의 합을 출력한다. 풀이 a, b = input().split() c = int(a)+int(b) print(c) a, b = input().split() a=int(a) b=int(b) c=a+b print(c)

Python 기초 100제 | 6026번 [내부링크]

문제 설명 실수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. 참고 입력되는 값은 기본적으로 문자열로 인식된다. 숫자로 구성된 문자열이나 정수를 실수(real number) 값으로 바꾸기 위해서는 float( ) 를 사용할 수 있다. 소숫점(.)은 그 위치가 정해져있지 않고 이리저리 둥둥 떠다니므로, floating point라고 부른다. 입력 2개의 실수가 줄을 바꿔 입력된다. 출력 두 실수의 합을 출력한다. 풀이 a = input() b = input() c = float(a)+float(b) print(c) a=input() b=input() a=float(a) b=float(b) c=a+b print(c)

Python 기초 100제 | 6027번 [내부링크]

문제 설명 10진수를 입력받아 16진수(hexadecimal)로 출력해보자. 예시 a = input() n = int(a) #입력된 a를 10진수 값으로 변환해 변수 n에 저장 print('%x'% n) #n에 저장되어있는 값을 16진수(hexadecimal) 소문자 형태 문자열로 출력 참고 10진수 형태로 입력받고 %x로 출력하면 16진수(hexadecimal) 소문자로 출력된다. (%o로 출력하면 8진수(octal) 문자열로 출력된다.) 10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9)의 문자를 사용하고, 16진법은 영문 소문자를 사용하는 경우에 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 a b c d e f)의 문자를 사용한다. 16진수 a는 10진수의 10, b는 11, c는 12 ... 와 같다. 입력 10진수 1개가 입력된다. 출력 16진수(소문자) 형태로 출력한다. 풀이 n = input() n = int(n) print('%x' % n)

Python 기초 100제 | 6028번 [내부링크]

문제 설명 10진수를 입력받아 16진수(hexadecimal)로 출력해보자. 예시 print('%X' % n) #n에 저장되어있는 값을 16진수 대문자 형태 문자열로 출력 참고 10진수 형태로 입력받고 %X로 출력하면 16진수(hexadecimal)대문자로 출력된다. 16진법은 영문 소문자를 사용하는 경우에 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 A B C D E F)의 문자를 사용한다. 16진수 A는 10진수의 10, B는 11, C는 12 ... 와 같다. 입력 10진수 1개가 입력된다. 출력 16진수(대문자) 형태로 출력한다. 풀이 n = input() n = int(n) print('%X' % n)

Python 기초 100제 | 6029번 [내부링크]

문제 설명 16진수를 입력받아 8진수(octal)로 출력해보자. 예시 a = input() n = int(a, 16) #입력된 a를 16진수로 인식해 변수 n에 저장 print('%o' % n) #n에 저장되어있는 값을 8진수(octal) 형태 문자열로 출력 참고 8진법은 한 자리에 8개(0 1 2 3 4 5 6 7)의 문자를 사용한다. 8진수 10은 10진수의 8, 11은 9, 12는 10 ... 와 같다. 입력 16진 정수 1개가 입력된다. 출력 8진수 형태로 출력한다. 풀이 a = input() n = int(a, 16) print('%o' % n)

Python 기초 100제 | 6030번 [내부링크]

문제 설명 영문자 1개를 입력받아 10진수 유니코드(Unicode) 값으로 출력해보자. 예시 n = ord(input()) print(n) 참고 n = ord(input()) #입력받은 문자를 10진수 유니코드 값으로 변환한 후, n에 저장한다. ord( ) 는 어떤 문자의 순서 위치(ordinal position) 값을 의미한다. 실제로 각각의 문자들에는 연속된 정수 값이 순서에 따라 부여 되어 있다. A:65, B:66, C:67 .... ord(c) : 문자 c 를 10진수로 변환한 값 컴퓨터로 저장되고 처리되는 모든 데이터들은 2진수 형태로 정수화 되어야 하는데, 컴퓨터에 문자를 저장하는 방법으로 아스키코드(ASCII Code)나 유니코드(Unicode)가 자주 사용된다. 예를 들어, 영문 대문자 'A'는 10진수 값 65 로 표현하고, 2진수(binary digit) 값 1000001 로 바꾸어 컴퓨터 내부에 저장한다. 유니코드(unicode)는 세계 여러 나라의 문자를 공

Python 기초 100제 | 6031번 [내부링크]

문제 설명 10진 정수 1개를 입력받아 유니코드 문자로 출력해보자. 예시 c = int(input()) print(chr(c)) #c에 저장되어 있는 정수 값을 유니코드 문자(chracter)로 바꿔 출력한다. 참고 입력은 기본적으로 모두 문자열로 입력되는 것이라고 할 수 있다. 따라서, 입력 값이 문자/문자열/정수/실수인지에 따라서 먼저 정확하게 변환시킨 다음에 사용하거나 계산하는 것이 좋다. 예를 들어 123 이 입력 되었다고 한다면, 이건 정수일까? 문자열일까? 조금 생각해보면, 입력된 것만 보고는 그 값이 어떤 데이터인지 알 수 없다는 것을 쉽게 이해할 수 있다. 따라서, 그 입력 값을 어떻게 해석하고 변환할 지에 대해서 명확하게 작성해 주어야 하는 것이다. chr( )는 정수값->문자, ord( )는 문자->정수값 형태로 바꿔주는 서로 반대 방향으로 바꾸어 주는 기능을 한다. 입력 10진 정수 1개(32 ~ 126 범위)가 입력된다. 출력 유니코드 문자로 출력한다. 풀이 c

Python 기초 100제 | 6032번 [내부링크]

문제 설명 입력된 정수의 부호를 바꿔 출력해보자. 예시 ... print(-n) 참고 단항(unary) 연산자인 -(negative)를 변수 앞에 붙이면 부호가 반대인 값이 된다. 입력 정수 1개가 입력된다. 출력 부호를 바꿔 출력한다. 풀이 n = int(input()) print(-n)

Python 기초 100제 | 6033번 [내부링크]

문제 설명 문자 1개를 입력받아 그 다음 문자를 출력해보자. 영문자 'A'의 다음 문자는 'B'이고, 숫자 '0'의 다음 문자는 '1'이다. 예시 ... print(chr(n+1)) 참고 숫자는 수를 표현하는 문자로서 '0' 은 문자 그 자체를 의미하고, 0은 값을 의미한다. 힌트 아스키문자표에서 'A'는 10진수 65로 저장되고 'B'는 10진수 66으로 저장된다. 따라서, 문자도 값으로 덧셈을 할 수 있다. 어떤 문자의 값에 1을 더하면 그 다음 문자의 값이 된다. 입력 문자 1개가 입력된다. 출력 그 다음 문자를 출력한다. 풀이 c = ord(input()) print(chr(c+1)) n1=input() n2=ord(n1)+1 s=chr(n2) print(s)

Python 기초 100제 | 6034번 [내부링크]

문제 설명 정수 2개(a, b)를 입력받아 a에서 b를 뺀 차를 출력하는 프로그램을 작성해보자. 예시 ... c = a - b print(c) 참고 수 - 수는 차(subtraction)가 계산된다. 입력 2개의 정수가 공백으로 구분되어 입력된다. 출력 첫 번째 정수에서 두 번째 정수를 뺀 차를 출력한다. 문자를 그대로 출력한다. 풀이 a, b = map(int, input().split()) print(a-b) a, b = input().split() c = int(a)-int(b) print(c)

Python 기초 100제 | 6035번 [내부링크]

문제 설명 실수 2개(f1, f2)를 입력받아 곱을 출력하는 프로그램을 작성해보자. 예시 ... m = f1 * f2 print(m) 참고 수 * 수는 곱(multiplication)이 계산된다. 입력 2개의 실수가 공백으로 구분되어 입력된다. 출력 첫 번째 실수와 두 번째 실수를 곱한 값을 출력한다. 풀이 a, b = map(float, input().split()) print(a*b) f1, f2 = input().split() m = float(f1)*float(f2) print(m)

Python 기초 100제 | 6036번 [내부링크]

문제 설명 단어와 반복 횟수를 입력받아 여러 번 출력해보자. 예시 w, n = input().split() print(w*int(n)) 참고 문자열 * 정수 또는 정수 * 문자열은 그 문자열을 여러 번 반복한 문자열을 만들어 준다. 입력 단어와 반복 횟수가 공백으로 구분되어 입력된다. 출력 입력된 단어를 입력된 횟수만큼 반복해 출력한다. 풀이 a, n = input().split() print(a * int(n)) w, n = input().split() n=int(n) print(w*n)

Python 기초 100제 | 6037번 [내부링크]

문제 설명 반복 횟수와 문장을 입력받아 여러 번 출력해보자. 예시 n = input() s = input() print(int(n)*s) 참고 문자열 * 정수 또는 정수 * 문자열은 그 문자열을 여러 번 반복한 문자열을 만들어 준다. 입력 반복 횟수와 문장이 줄을 바꿔 입력된다. 출력 입력된 횟수만큼 입력된 문장을 출력한다. 풀이 n = int(input()) c = str(input()) print(n * c) n = input() s = input() print(int(n)*s)

Python 기초 100제 | 6038번 [내부링크]

문제 설명 정수 2개(a, b)를 입력받아 a를 b번 곱한 거듭제곱을 출력하는 프로그램을 작성해보자. 예시 ... c = a**b print(c) 참고 python 언어에서는 거듭제곱을 계산하는 연산자(**)를 제공한다. 일반적으로 수학 식에서 거듭제곱을 표현하는 사용하는 서컴플렉스/케릿 기호(^)는 프로그래밍언어에서 다른 의미로 쓰인다. 입력 2개의 정수(a, b)가 공백으로 구분되어 입력된다. 출력 a를 b번 거듭제곱한 값을 출력한다. 풀이 a, b = map(int, input().split()) print(a**b) a, b = input().split() c = int(a)**int(b) print(c)

Python 기초 100제 | 6039번 [내부링크]

문제 설명 실수 2개(f1, f2)를 입력받아 f1을 f2번 거듭제곱한 값을 출력하는 프로그램을 작성해보자. 참고 python 언어에서는 거듭제곱(exponentiation)을 계산하는 연산자(**)를 제공한다. 일반적으로 수학 식에서 거듭제곱을 표현하는 사용하는 서컴플렉스/케릿 기호(^)는 프로그래밍언어에서 다른 의미로 쓰인다. 입력 2개의 실수(f1, f2)가 공백으로 구분되어 입력된다. 출력 f1을 f2번 거듭제곱한 값을 출력한다. 풀이 a, b = map(float, input().split()) print(a**b) f1, f2 = input().split() f3 = float(f1)**float(f2) print(f3)

Python 기초 100제 | 6040번 [내부링크]

문제 설명 정수 2개(a, b) 를 입력받아 a를 b로 나눈 몫을 출력해보자. 예시 ... print(a//b) 참고 python언어에서는 나눈 몫을 계산하는 연산자(//, floor division)를 제공한다. a//b 와 같이 작성하면, a를 b로 나눈 몫(quotient)을 계산해준다. 프로그래밍언어에 따라 이렇게 몫을 계산해주는 연산자가 없는 경우도 있다. 실수로 나눈 몫이 어떻게 계산될지도 생각해보자. 입력 2개의 정수(a, b)가 공백으로 구분되어 입력된다. 출력 a를 b로 나눈 몫을 출력한다. 풀이 a, b = map(int, input().split()) print(a//b) a, b = input().split() print(int(a)//int(b))

Python 기초 100제 | 6041번 [내부링크]

문제 설명 정수 2개(a, b) 를 입력받아 a를 b로 나눈 나머지를 출력해보자. 예시 ... print(a%b) 참고 python 언어에서는 나눈 나머지를 계산하는 연산자(%, remainder)를 제공한다. a%b 와 같이 작성하면, a를 b로 나눈 나머지(remainder)를 계산해준다. 나머지 연산(modulus, mod 연산)은 수학자 가우스가 생각해 낸 연산으로, 어떤 수를 다른 수로 나누고 난 후 남는 나머지를 계산하는 연산이다. 실수로 나눈 나머지가 어떻게 계산될지도 생각해보자. 입력 2개의 정수(a, b)가 공백으로 구분되어 입력된다. 출력 a를 b로 나눈 나머지를 출력한다. 풀이 a, b = map(int, input().split()) print(a % b) a, b = input().split() print(int(a)%int(b))

Python 기초 100제 | 6042번 [내부링크]

문제 설명 실수 1개를 입력받아 소숫점 이하 두 번째 자리까지의 정확도로 반올림한 값을 출력해보자. 예시 a=input() a=float(a) print( format(a, ".2f") ) 참고 format(수, ".2f") 를 사용하면 원하는 자리까지의 정확도로 반올림 된 실수 값을 만들어 준다. 여기서 만들어진 값은 소수점 아래 3번째 자리에서 반올림한 값이다. 컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은 정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다. 실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데, 그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다. 입력 실수 1개가 입력된다. 출력 소숫점 이하 두 번째 자리까지의 정확도로 반올림한 값을 출력한다. 풀이 n = float(input()) print(format(n, ".2

Python 기초 100제 | 6043번 [내부링크]

문제 설명 실수 2개(f1, f2)를 입력받아 f1 을 f2 로 나눈 값을 출력해보자. 이 때 소숫점 넷째자리에서 반올림하여 무조건 소숫점 셋째 자리까지 출력한다. 참고 python 언어에는 나눗셈(division)을 계산하는 연산자(/)가 있다. 컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은 정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다. 실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데, 그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다. 계산 결과값 중에서 믿을 수 있는 숫자의 개수를 의미하는, 유효숫자에 대해 찾아보자. 과학실험에서 온도나 부피를 측정할 때에도 유효숫자는 중요하다. 입력 2개의 실수(f1, f2)가 공백으로 구분되어 입력된다. 출력 f1을 f2로 나눈 결과를 소숫점 이하 넷째 자리에서 반올림하여 소숫점 세 번

Python 기초 100제 | 6044번 [내부링크]

문제 설명 정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보자. 단, b는 0이 아니다. 입력 정수 2개가 공백을 두고 입력된다. 출력 첫 번째 줄에 합 두 번째 줄에 차, 세 번째 줄에 곱, 네 번째 줄에 몫, 다섯 번째 줄에 나머지, 여섯 번째 줄에 나눈 값을 순서대로 출력한다. (실수, 소수점 이하 둘째 자리까지의 정확도로 출력) 문자를 그대로 출력한다. 풀이 a, b = map(int, input().split()) print(a+b) print(a-b) print(a*b) print(a//b) print(a%b) c = a/b print(format(c, ".2f")) a,b=input().split() a=int(a) b=int(b) print(a+b) print(a-b) print(a*b) print(a//b) print(a%b) print(round(a/b,2))

Python 기초 100제 | 6045번 [내부링크]

문제 설명 정수 3개를 입력받아 합과 평균을 출력해보자. 참고 공백으로 구분된 한 줄로 값들을 입력받기 위해서는 a, b, c = input().split() 과 같은 방법이 가능하고, 공백으로 구분해 두 값을 출력하기 위해서는 print(d, e) 와 같은 방법이 가능하다. 잘라낸 값들은 그 값의 특성(정수, 실수, 문자, 문자열 ...)에 따라 명확하게 변환시킨 후 사용하는 것이 좋다. python 프로그래밍을 처음 배울 때 좋은 습관(단계) 1. 입력된 문자열을 정확하게 잘라낸다.(공백, 줄바꿈, 구분문자 등에 따라 정확하게 잘라낸다.) 2. 잘라낸 데이터들을 데이터형에 맞게 변환해 변수에 저장한다. (정수, 실수, 문자, 문자열 등에 따라 정확하게 변환한다.) 3. 값을 저장했다가 다시 사용하기 위해, 변수를 이용해 값을 저장하고, 변수를 이용해 계산을 한다. 4. 원하는 결과 값을 필요한 형태로 만들어 출력한다.(공백, 줄바꿈, 구분자, 등에 따라 원하는 형태로 만들어 출력

Python 기초 100제 | 6046번 [내부링크]

문제 설명 정수 1개를 입력받아 2배 곱해 출력해보자. 참고 *2 를 계산한 값을 출력해도 되지만, 정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용할 수 있다. 컴퓨터 내부에는 2진수 형태로 값들이 저장되기 때문에, 2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로 지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 1/2로 줄어드는데, 왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고, 오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고, 가장 오른쪽에 있는 1비트는 사라진다. 예시 n = 10 print(n<<1) #10을 2배 한 값인 20 이 출력된다. print(n>>1) #10을 반으로 나눈 값인 5 가 출력된다. print(n<<2) #10을 4배 한 값인 40 이 출력된다. print(n>>2) #10을 반으로 나눈 후 다시

Python 기초 100제 | 6047번 [내부링크]

문제 설명 정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자. 0 <= a <= 10, 0 <= b <= 10 예시 a = 2 b = 10 print(a << b) #210 = 1024 가 출력된다. 참고 예를 들어 1 3 이 입력되면 1을 23(8)배 하여 출력한다. 입력 정수 2개(a, b)가 공백을 두고 입력된다. 0 <= a, b <= 10 출력 a 를 2b배 만큼 곱한 값을 출력한다. 풀이 a, b = map(int, input().split()) print(a<<b)

Python 기초 100제 | 6048번 [내부링크]

문제 설명 두 정수(a, b)를 입력받아 a가 b보다 작으면 True 를, a가 b보다 크거나 같으면 False 를 출력하는 프로그램을 작성해보자. 예시 print(123<456) #비교 연산자 < 의 계산 결과인 True(참)가 출력된다. (123, 456 은 숫자로 작성된 단어이기 때문에 10진수로 인식된다.) 참고 어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다. 비교/관계연산자 < (less than sign) 는 왼쪽의 값이 오른쪽 값 보다 작은 경우 True(참)로 계산하고, 그 외의 경우에는 False(거짓)로 계산한다. 비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고, 그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다. 비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다. True(참) 또는 False(거짓)

Python 기초 100제 | 6049번 [내부링크]

문제 설명 두 정수(a, b)를 입력받아 a와 b의 값이 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자. 참고 어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다. 비교/관계연산자 == (equal sign 2개) 는 왼쪽의 계산 결과값과 오른쪽의 계산 결과값이 같은 경우 True(참)로 계산하고, 그 외의 경우에는 False(거짓)로 계산한다. 비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고, 그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다. 비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다. ** 수학에서 왼쪽과 오른쪽의 계산 결과가 같음(동치)을 나타내는 기호 =(equal sign) 1개는 프로그래밍언어에서는 전혀 다른 의미로 사용된다. a = 1 와 같은 표현은 a와 1의 값이 같다는

Python 기초 100제 | 6050번 [내부링크]

문제 설명 두 정수(a, b)를 입력받아 b의 값이 a의 값 보다 크거나 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자. 참고 어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다. 비교/관계연산자 <= 는 오른쪽의 계산 결과값이 왼쪽의 계산 결과값보다 크거나 같은 경우 True(참)로 계산하고, 그 외의 경우에는 False(거짓)로 계산한다. <=, >= 연산자는 같음(==)을 포함한다. 따라서 “작다/크다” 거나 "같다”는 의미를 가진다. 작다(<)/크다(>)/다르다(!) 기호는 등호(=)와 함께 왼쪽에 붙여써야 한다. 비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고, 그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다. 비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다. 입력 2개의 정수(a,

Python 기초 100제 | 6060번 [내부링크]

문제 설명 입력된 정수 두 개를 비트단위로 and 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise)연산자 &를 사용하면 된다.(and, ampersand, 앰퍼센드라고 읽는다.) ** 비트단위(bitwise)연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다. 예를 들어 3과 5가 입력되었을 때를 살펴보면 3 : 00000000 00000000 00000000 00000011 5 : 00000000 00000000 00000000 00000101 3 & 5 : 00000000 00000000 00000000 00000001 이 된다. 비트단위 and 연산은 두 비트열이 주어졌을 때, 둘 다 1인 부분의 자리만 1로 만들어주는 것과 같다. 이 연산을 이용하면 어떤 비트열의 특정 부분만 모두 0으로도 만들

Python 기초 100제 | 6061번 [내부링크]

문제 설명 입력된 정수 두 개를 비트단위로 or 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise) 연산자 |(or, vertical bar, 버티컬바)를 사용하면 된다. ** | 은 파이프(pipe)연산자라고도 불리는 경우가 있다. ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다. 예를 들어 3과 5가 입력되었을 때를 살펴보면 3 : 00000000 00000000 00000000 00000011 5 : 00000000 00000000 00000000 00000101 3 | 5 : 00000000 00000000 00000000 00000111 이 된다. 비트단위 or 연산은 둘 중 하나라도 1인 자리를 1로 만들어주는 것과 같다. 이러한 비트단위 연산은 빠른 계산이 필

Python 기초 100제 | 6062번 [내부링크]

문제 설명 입력된 정수 두 개를 비트단위로 xor 연산한 후 그 결과를 정수로 출력해보자. 비트단위(bitwise) 연산자 ^(xor, circumflex/caret, 서컴플렉스/카릿)를 사용하면 된다. ** 주의 ^은 수학식에서 거듭제곱(power)을 나타내는 기호와 모양은 같지만, C언어에서는 전혀 다른 배타적 논리합(xor, 서로 다를 때 1)의 의미를 가진다. ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left shift), >>(bitwise right shift) 가 있다. 예를 들어 3과 5가 입력되었을 때를 살펴보면 3 : 00000000 00000000 00000000 00000011 5 : 00000000 00000000 00000000 00000101 3 ^ 5 : 00000000 00000000 00000000 00000110 이 된

Bandit Level 5 → Level 6 [내부링크]

Bandit Level 5→ Level 6. 파일에 저장된 암호를 찾아라. 암호는 'inhere' 디렉터리에 있는 파일 안에 있다. 그 파일은 사람이 읽을 수 있고 1033 바이트 크기의 실행 가능하지 않는 파일이다. bandit5 로그인 정보는 아래와 같다. 명령어: ssh [email protected] -p 2220 passward: lrIWWI6bB37kxfiCQZqUdOIYfr6eEeqR bandit5에 접속하여 ls 명령어와 cd 명령어를 사용하여 'inhere' 디렉터리로 이동했다. 조건에 맞는 파일을 찾으려고 했더니 'inhere' 디렉터리 안에 디렉터리만 20개나 된다. 'inhere' 디렉터리 위치에서 ls 명령어를 사용하여 숨김 파일 포함(-a)하여 하위 디렉터리에 있는 파일(-R)들까지 모두 상세내용(-l)을 출력하도록 했다. 파일이 많아 한 번에 찾긴 힘들었지만 maybehere07 디렉터리 안에 숨겨져있었던 .file2 파일이

Carve Party [내부링크]

할로윈 파티를 기념하기 위해 호박을 준비했습니다! 호박을 10000번 클릭하고 플래그를 획득하세요! 문제 파일을 다운 받아 압축을 풀면 html 코드 파일이 나온다. ↓↓ 코드 ↓↓ <!doctype html> <html> <head> <meta charset="utf-8"> <title>do you want to build a jack-o-lantern?</title> <style> html, body { margin: 0; padding: 0; width: 100%; height: 100%; } .jack { display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; height: 100%; } .jack svg { width: 50%; cursor: pointer; } #jack-target { cursor: url("data:image/svg+xml;utf8,<

Flying Chars [내부링크]

날아다니는 글자들을 멈춰서 전체 문자열을 알아내세요! 플래그 형식은 DH{전체 문자열} 입니다. 첨부파일을 제공하지 않는 문제입니다. 플래그에 포함된 알파벳 중 x, s, o는 모두 소문자입니다. 플래그에 포함된 알파벳 중 c는 모두 대문자입니다. 주어진 페이지에 들어가면 위와 같은 글자들이 왼쪽에서 오른쪽으로 정신없이 움직이고 있다. (화면 캡처를 해서 글자가 잘 보이긴 한다.) F12를 눌러 개발자 도구를 켠다. 해당 페이지에 대한 코드가 나온다. 처음엔 쉽지만 귀찮은 방법으로 풀어봤다. 페이지에 글자가 세로로 나열되어 있고 js 부분이나 이미지가 삽입된 img 부분에서 이미지의 순서를 찾았다. (img 부분은 transform값이 자꾸 바뀌어서 눈이 아파 js 부분을 참고했다..) 순서는 10 → 17 → 13 → 7 → 16 → 8 → 14 → 2 → 9 → 5 → 11 → 6 →12 → 3 → 0 → 19 → 4 → 15 → 18 → 1이다. 소스 창에 들어가면 image

비트 연산자 [내부링크]

비트 단위로 연산을 진행하는 비트 연산자에 대해 간단하게 정리해보겠다. 연산자 연산자의 기능 결합방향 & 비트단위로 AND 연산을 한다. → | 비트단위로 OR 연산을 한다. → ^ 비트단위로 XOR 연산을 한다. → ~ 단항 연산자로서 피연산자의 모든 비트를 반전시킨다. ← << 피연산자의 비트 열을 왼쪽으로 이동시킨다. → >> 피연산자의 비트 열을 오른쪽으로 이동시킨다. → 먼저 알고 가야하는 개념 정수의 가장 왼쪽에 존재하는 비트는 '부호비트'이다. (양수·음수) (정수는 4바이트라 32비트이지만, 너무 길어 아래 연산에서는 1바이트로 표현하였다.) & 연산자: 비트단위 AND 두 개의 비트가 모두 1일 때 1을 반환한다. 이 외에는 모두 0을 반환함. #include <stdio.h> int main(void) { int num1 = 15; // 00000000 00000000 00000000 00001111 int num2 = 20; // 00000000 00000000

과학적 지수 표기법, e 표기법 [내부링크]

지수 표기법(exponential notation)아주 큰 숫자나 아주 작은 숫자를 표기할 때 사용하는 표기법 과학적 표기법(scientific notation)이라고도 한다. a*10^b를 aEb로 표기 ex) 240(2.4*10^2) → 2.4E2 0E2847 → (0*10^2847)0 0.314(3.14*10^(-1)) → 3.14e-1 0.314(314*10^(-3)) → 314e-3 같은 값도 지수 값의 크기에 따라 무수히 많은 방법으로 표현 가능하다.

Python 기초 100제 | 6054번 [내부링크]

문제 설명 2개의 정수값이 입력될 때, 그 불 값이 모두 True 일 때에만 True 를 출력하는 프로그램을 작성해보자. 예시 a, b = input().split() print(bool(int(a)) and bool(int(b))) 참고 and 예약어는 주어진 두 불 값이 모두 True 일 때에만 True 로 계산하고, 나머지 경우는 False 로 계산한다. 이러한 논리연산을 AND 연산(boolean AND)이라고도 부르고, · 으로 표시하거나 생략하며, 집합 기호 ∩(교집합, intersection)로 표시하기도 한다. 모두 같은 의미이다. 참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는

Python 기초 100제 | 6055번 [내부링크]

문제 설명 2개의 정수값이 입력될 때, 그 불 값이 하나라도 True 일 때에만 True 를 출력하는 프로그램을 작성해보자. 참고 or 예약어는 주어진 두 불 값 중에서 하나라도 True 이면 True 로 계산하고, 나머지 경우는 False 로 계산한다. 이러한 논리연산을 OR 연산(boolean OR)이라고도 부르고, + 로 표시하거나, 집합 기호 ∪(합집합, union)로 표시하기도 한다. 모두 같은 의미이다. 참, 거짓의 논리값 인 불(boolean) 값을 다루어주는 예약어는 not, and, or 이 있고, 불 값들 사이의 논리(not, and, or) 연산 결과도 마찬가지로 True 또는 False 의 불 값으로 계산된다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다. 입력 2개의 정수가 공백을 두고 입력된다. 출력 하나라도 참일 경우 True 를 출력하고, 그

Python 기초 100제 | 6056번 [내부링크]

문제 설명 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 서로 다를 때에만 True 를 출력하는 프로그램을 작성해보자. 예시 ... c = bool(int(a)) d = bool(int(b)) print((c and (not d)) or ((not c) and d)) 참고 참 거짓이 서로 다를 때에만 True 로 계산하는 논리연산을 XOR(exclusive or, 배타적 논리합) 연산이라고도 부른다. 논리연산자는 사칙(+, -, *, /) 연산자와 마찬가지로 여러 번 중복해서 사용할 수 있는데, 사칙 연산자와 마찬가지로 계산 순서를 표시하기 위해 괄호 ( )를 사용할 수 있다. 괄호를 사용하면 계산 순서를 명확하게 표현할 수 있다. 수학 식에서는 소괄호 (), 중괄호 {}, 대괄호 []를 사용하기도 하지만, 프로그래밍언어에서는 소괄호 ( ) 만 사용한다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만

Python 기초 100제 | 6057번 [내부링크]

문제 설명 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 서로 같을 때에만 True 를 출력하는 프로그램을 작성해보자. 입력 2개의 정수가 공백을 두고 입력된다. 출력 두 값의 True / False 값이 서로 같을 경우만 True 를 출력하고, 그 외의 경우에는 False 를 출력한다. 풀이 a, b = input().split() c = bool(int(a)) d = bool(int(b)) print((not(c) and not(d)) or (c and d)) a, b = input().split() a = bool(int(a)) b = bool(int(b)) print(a==b)

Python 기초 100제 | 6058번 [내부링크]

문제 설명 2개의 정수값이 입력될 때, 그 불 값(True/False) 이 모두 False 일 때에만 True 를 출력하는 프로그램을 작성해보자. 입력 2개의 정수가 공백을 두고 입력된다. 출력 두 값의 True / False 값이 모두 False 일 때만 True 를 출력하고, 그 외의 경우에는 False 를 출력한다. 풀이 a, b = input().split() c = bool(int(a)) d = bool(int(b)) e = (not(c) and not(d)) print(e) a, b = input().split() c= bool(int(a)) d= bool(int(b)) print( not (c or d) ) a, b = input().split() c= bool(int(a)) d= bool(int(b)) print( c==False and d==False )

Python 기초 100제 | 6059번 [내부링크]

문제 설명 변수(variable)는 어떤 값(정수, 실수, 문자, 문자열 등)을 저장할 수 있는 공간의 별명이라고 할 수 있다. 어떤 값을 저장했다가 다시 사용하기 위해서 변수를 사용한다. 저장할 내용들이 많으면 필요한 만큼 변수를 만들어 사용하면 된다. 변수는 포스트 잇과 같은 메모지에 필요한 내용을 적어두었다가, 필요할 때 찾아 살펴보는 것과 비슷하다. 대수학(algebra)에서는 어떤 수나 값을 대신해 문자로 표현하는 방법을 사용한다. 프로그래밍언어에서도 마찬가지로 자신이 알아보기 쉬운 짧은 단어를 사용하는 것이 좋다. 예시) y = x + 입력 된 정수를 비트단위로 참/거짓을 바꾼 후 정수로 출력해보자. 비트단위(bitwise)연산자 ~ 를 붙이면 된다.(~ : tilde, 틸드라고 읽는다.) ** 비트단위(bitwise) 연산자는, ~(bitwise not), &(bitwise and), |(bitwise or), ^(bitwise xor), <<(bitwise left s

Python 기초 100제 | 6051번 [내부링크]

문제 설명 두 정수(a, b)를 입력받아 a의 값이 b의 값과 서로 다르면 True 를, 같으면 False 를 출력하는 프로그램을 작성해보자. 참고 어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다. 비교/관계연산자 != 는 왼쪽의 계산 결과값이 오른쪽의 계산 결과값이 서로 다른 경우 True(참)로 계산하고, 그 외의 경우에는 False(거짓)로 계산한다. 비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고, 그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다. 비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다. 입력 2개의 정수(a, b)가 공백을 두고 입력된다. -2147483647 <= a, b <= +2147483648 출력 a와 b가 다른 경우 True 를, 그렇지 않은 경우 False 를 출력한다. 풀이 a, b = m

Python 기초 100제 | 6052번 [내부링크]

문제 설명 정수가 입력되었을 때, True/False 로 평가해주는 프로그램을 작성해보자. 예시 n = int(input()) print(bool(n)) 참고 bool( ) 을 이용하면 입력된 식이나 값을 평가해 불 형의 값(True 또는 False)을 출력해준다. 식이나 값을 계산해서 결과값이 만들어지는 것을 평가(evaluate)라고 한다. python 언어에서 정수값 0은 False(거짓)로 평가되고, 그 외의 값들은 모두 True(참)로 평가된다. ** 불 대수(boolean algebra)는 수학자 불이 만들어낸 것으로 True(참)/False(거짓) 값만 가지는 논리값과 그 값들 사이의 연산을 다룬다. 입력 정수 1개가 입력된다. 출력 입력된 값이 0이면 False, 0이 아니면 True 를 출력한다. 풀이 n = int(input()) print(bool(n))

Python 기초 100제 | 6053번 [내부링크]

문제 설명 정수값이 입력될 때, 그 불 값을 반대로 출력하는 프로그램을 작성해보자. 예시 a = bool(int(input())) print(not a) 참고 a = bool(int(input())) 와 같은 형태로 겹쳐 작성하면, 한 번에 한 단계씩 계산/처리/평가된다. 위와 같은 명령문의 경우 input( ), int( ), bool( ) 순서로 한 번에 한 단계씩 계산/처리/평가된다. 어떤 불 값이나 변수에 not True, not False, not a 와 같은 계산이 가능하다. 참 또는 거짓의 논리값을 역(반대)으로 바꾸기 위해서 not 예약어(reserved word, keyword)를 사용할 수 있다. 이러한 논리연산을 NOT 연산(boolean NOT)이라고도 부르고, 프라임 '(문자 오른쪽 위에 작은 따옴표), 바(기호 위에 가로 막대), 문자 오른쪽 위에 c(여집합, complement) 등으로 표시한다. 모두 같은 의미이다. 참, 거짓의 논리값 인 불(boolea

해킹 강국 북한의 APT 그룹, 2023년 상반기 위협 동향은? [내부링크]

https://www.boannews.com/media/view.asp?idx=120203 해킹 강국 북한의 APT 그룹, 2023년 상반기 위협 동향은? 지난 5월 미국의 IT기업 해커어스가 개최한 코딩 대회에서 북한 학생들이 1~4위를 싹쓸이한 것으로 드러났다. 국제대회 수상으로 북한의 IT 인력 자원의 우수성이 다시 한번 확인된 셈이다. 또한, 북한 최고지도자 김정은이 “해커들은 출신 성분을 따지지 말고 뽑으라”는 지시를 내린 것으로도 알려졌다. 이처럼 북한이 IT인력 및 해커 양성에 공을 들일수록 한국을 비롯한 세계 여러 국가는 불안감이 더 커질 수밖에 없다. www.boannews.com 작성 2023.07.17 북한의 APT 그룹 북한 정부와 관련된 해킹 그룹으로, 라자루스(Lazarus), 킴수키(Kimsuky), 스카크러프트(Scarcruft), 블루노로프(BlueNoroff), 안다리엘(Andariel) 등이 있다. 스테노그래피 '감춰져 있다'는 뜻의 'stegano

반복 구조 순서도 [내부링크]

반복 구조의 순서도 중첩 반복 구조의 순서도 먼저, 조건1에서 그 결과 값이 참이면 내곽 루프(회색 상자)에 진입한다. 이제 내곽 루프의 실행이 시작된다. 내곽 루프의 실행은 위에 있는 반복 구조의 순서도 흐름과 같다. 즉, 조건2를 평가하여 그 결과 값이 참이면 처리 과정을 수행하고, 다음번째 반복으로 이동한다. 이러한 과정은 조건2가 거짓으로 평가될 때까지 반복된다. 내곽 루프의 조건2가 거짓으로 평가될 경우에 내곽 루프의 실행이 종료되어 내곽 루프를 빠져나온다. 여기서 중요한 것은 내곽 루프의 실행 종료는 외곽 루프의 본체 실행 종료를 의미한다. 따라서 다음의 실행 지점은 외곽 루프의 다음번째 반복이다. 따라서 조건1이 다시 수행되고, 반복 수행 여부를 판단한다. 조건1의 평가 결과 값이 참이면 다시 내곽 루프가 반복 수행된다. 그러나 조건1의 평가 결과 값이 거짓이면 전체 중첩 루프의 실행 종료하고 빠져나온다.