본문 바로가기
  • 개발 삽질 블로그

분류 전체보기89

백준 9095번: 1, 2, 3 더하기 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 이 문제는 조금 어려웠던 것 같다. 알고리즘 분류는 다이나믹 프로그래밍이다. 다이나믹 프로그래밍이란 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘 설계 기법이다. 1 = 1 (1개) 2 = 1 + 1 = 2 (2개) 3 = 1 + 1 + 1 = 1 + 2 = 2 + 1 = 3 (4개) 4 = 1 + 1 + 1 + 1 = 1 + 1 + 2 = 1 + 2 + 1 = 2 + 1 + 1 = 2 + 2 = 1 + 3 = 3 + 1(7개) n을 1.. 2022. 10. 3.
백준 1748: 수 이어 쓰기 1 https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 이 문제는 노트에 좀 써보면 알고리즘을 찾기 쉬웠던 것 같다. N을 입력 받고 N의 자릿수를 구해준다. N의 자릿수를 l이라고 두고 풀었다. N까지 한 자리 수: 9개 //1~9 두 자리 수: 90개 //10~99 세 자리 수: 900개 //100~999 ... l-1자리 수 : 9*(10^(l-2))개 //100...0~999..9 그리고 l 자리수는 N-(10^(l-1))+1개 있다. import java.util.*; public class Main { public static void main(String[] .. 2022. 10. 3.
백준 2309: 일곱 난쟁이[JAVA] / 투포인터 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 9명 중 7명을 뽑는 것은 포함하지 않은 2명을 뽑는 것과 같다. 9명 난쟁이들의 키의 합을 구하고 100과의 차이를 구한다. 그 차이를 n이라고 두면 n은 일곱 난쟁이에 포함되지 않는 두 명의 키의 합과 같을 것이다. 반복문을 돌려 키의 합이 n인 난쟁이 두 명을 찾아주는 알고리즘을 짰다. import java.util.*; public class Main { public static void main(.. 2022. 10. 3.
[스무디] 어셈블리어 강의4~7강 정리 #4강 메모리📌RAM(Random Access Memory)-주기억장치에 사용, 휘발성 메모리-하드디스크에 비해 속도가 빠르기 때문에 주기억장치로 사용-저장 원리: 전류의 흐름에 따라 0과 1로 저장참고) 레지스터, 캐시, 램, 하드디스크용량: 하드디스크(T) > RAM(G) > 레지스터(Byte)속도 및 가격: 레지스터 > RAM > 하드디스크#5강 메모리 주소 접근-word(워드): 컴퓨터 설계 시 정해지는 메모리 기본 단위, 하나의 기계어 명령어나 연산을 통해 저장된 장치로부터 레지스터에 옮겨 놓을 수 있는 데이터 단위-메모리 각 주소에 바이트 단위로 데이터를 담도록 설계-32비트: 주소 값은 32bit(4Byte)로 설계,  2^32개의 주소 지정 가능→32bit 램 용량은 2^32*1바이트 =.. 2022. 10. 2.
[ 스무디 ] 어셈블리어 강의 1~ 3강 정리 # 1강📌어셈블리어: 기계어를 일정한 규칙에 따라 대응시킨 것-기계어 -> CPU에 따라 상이-어셈블리어-> 기계어를 1:1로 기호와 알파벳으로 변환한 것, *사람이 읽기 편함**컴퓨터 구조→ 기계어 → 어셈블리어, 따라서 어셈블리어도 각각 다름CPU마다 지원하는 오퍼레이션(연산)의 타입과 개수는 제각각, 레지스터의 크기나 개수도 다름📌 어셈블러: 어셈블리어를 기계어로 바꿔주는 프로그램, 어셈블리어를 기계어 형태의 오브젝트 코드로 해석-MASM, FASM, NASM, GAS 등이 있음-지시어가 어셈블러마다 다름!**ollydbg 사용**-ollydbg: 바이너리 코드 분석을 위한 x86 디버거, 리버스 엔지니어링에 종종 사용됨 #2강📌어셈블리어→ intel 문법 vs AT&T 문법- 차이점**접두사.. 2022. 10. 2.
리버싱 입문 교내 보안 동아리 활동으로 2학기~겨울방학까지 리버싱 스터디를 진행하였습니다.벌써 어지럽지만 리버싱 개념을 잡고 어셈블리부터 차근차근 공부하기로리버싱 입문 chapter01 읽고 정리한 내용입니다  리버싱 엔지니어링(Reverse Engineering)소프트웨어 공학의 한 분야로, 이미 만들어진 시스템을 역으로 추척하여 시스템의 구조, 기능, 동작 등을 분석하여 그 원리를 이해하며 단점을 보완하고 처음의 문서나 설계 기법 등의 자료를 얻어내는 것, 역공학이라고도 함 *필요한 지식: 레지스터, 메모리, 스택, 어셈블러, PE 구조, 디버깅 등  정적 분석(static analysis)- 파일을 실행하지 않고, 파일을 관찰하여 분석하는 방법- 주로 악성코드와 같이 실행하면서 분석하기 어려운 시스템을 정적 분.. 2022. 10. 2.