목록개인 공부 (23)
베지밀
11723 집합 문제 문제 풀이의 관건set를 사용해서 집합 연산을 수행all, empty와 같이 x값이 주어지지 않는 경우 구분임시로 입력값을 저장하고, 입력값의 개수를 구분하자 정답import sysM = int(sys.stdin.readline())S = set()for _ in range(M): tmp = sys.stdin.readline().split() if len(tmp) == 1: if tmp[0] == 'all': S = set(range(1, 21)) else: S = set() else: cmd = tmp[0] x = int(tmp[1]) if cmd == 'add': S.add(x) if cmd == 'remo..
1152 단어의 개수 정답S = input().split()print(len(S)) 실패한 시도S = input().strip()cnt = S.count(' ')print(cnt+1) 처음엔 공백의 개수를 세면 된다고 생각해서 count함수를 사용하여 코드를 작성했다.심지어 문자열 앞 뒤 공백을 제거하면서 완벽한 코드라고 생각했다..! 그러나 계속해서 틀리길래 gpt를 통해 질의한 결과..나의 코드는 빈 문자열도 1로 계산해버림따라서 strip과 count를 사용하는 것이 아닌, split으로 문자열을 쪼개서 리스트로 변환하도록 수정했다.
문제는 다음과 같다. 나는 다음 두 가지 방법으로 풀었다.1. sort()로 정렬해서 첫번째와 마지막 인덱스를 찾는 방법2. min(), max() 함수를 이용하는 방법 #10818#sort()N = int(input())num_list = list(map(int, input().split()))num_list.sort()print(num_list[0], end=' ')print(num_list[N-1])#10818#min(), max()N = int(input())num_list = list(map(int, input().split()))print(min(num_list), end=' ')print(max(num_list))참고로 print(min(num_list), max(num_list))가 더 ..
25314 코딩은 체육과목입니다 풀이N = int(input())for i in range(N//4): print("long ", end="")print("int") print의 end옵션을 사용해서 long 이후에 줄바꿈이 없도록 했다. 처음에 /로 구현했을 때 float 오류가 났다.나중에 알아보니 /와 //의 자료형 차이였다./는 float형 반환//는 int형 반환
IT계열 전공이지만 개발자가 아니라서 코딩을 제대로 해본 적 없는 취준생의.. 취준 성공을 위한 코테 공부 시작 - Python, C를 수강한 적은 있음- 알고리즘 공부해본 적 없음 & 교양 수준의 코딩 지식 이 영상 보고 시작함https://youtu.be/ukkLCl9yBvE?si=dYFjKdwThMHBb04u 1. 코드업 파이썬 기초 100제https://codeup.kr/problemsetsol.php?psid=33 문제집 / Python 기초 100제 codeup.kr 혹은 백준 단계별로 풀어보기 6단계까지https://www.acmicpc.net/step 2. 백준 알고리즘 문제 풀기가이드 : 그리디 알고리즘 - 탐색(완전탐색, BFS, DFS) 만 잘 갖춰도 코테에서 떨어질 일 ..
2가 더 쉬움 Server-client 2 IDA로 서버 코드를 열어보자 23번째 줄에서 연결이 수립되고, sub_401140 함수로 연결된다. (i는 아마도 소켓일 것이다)해당 부분이 문제를 푸는 포인트인 것 같아서 진입해본다. sub_401140 함수아까 cmd창에서 본 문자열들이다.사용자로부터 번호를 receive하고 input에 저장한다. strncmp로 입력값을 비교해서 어떤 역할을 수행하는데, 7777이 보인다. input 입력값에서 세미콜론을 찾고, 해당 위치 포인터를 v2에 반환한다.그리고 ; 이후의 값부터 sub_401000함수로 넘겨준다. sub_401000 함수v2+1부터의 값은 Command라는 매개변수로 들어왔다.buf라는 버퍼를 7777~ 문자열로 붙여놓고, 이후는 0으로 초기화..
분석툴 - x32dbg / IDA 처음 fe를 실행시키면 바탕화면에 아이유들이 다 사라져있다. (새로운 파일로 덮어씌워졌다) main 함수 12번째 줄 함수 (get_desktop_path)해당 함수의 내용SHGetSpecialFolderPathA라는 API에 \x10를 인자로 주면 Desktop의 경로를 받아온다.SHGetSpecialFolderPathA : 윈도우의 특정 경로를 가져오는 함수참고 : https://2ry53.tistory.com/entry/CSIDL의-값과-그-사용-방법Desktop 경로를 잘 가져왔으면 1, 아니면 0 FileName = input(=Desktop 주소) + \\*.* 을 이어붙여서 버퍼에 쓰고바탕화면에서 확장자가 존재하는 모든 파일을 가져온 후문자열 끝에서 .을 찾..
분석툴 - IDA 현재 실행중인 파일 경로 Filename에 받아온다.Filename = C:\Users\anon\Desktop\kisia_samples\4_ida_training\ida_training\training1_hm.exemal_deu라는 경로는 filename에 없기 때문에 if문을 지나서 밖의 명령이 실행됨GetTempPathA : 임시폴더의 경로를 Buffer에 가져옴. Buffer = C:\Users\anon\AppData\Local\TempPathAppendA : Buffer의 경로에 ‘mal_edu’라는 값을 더한다. Buffer = C:\Users\anon\AppData\Local\Temp\mal_eduCreateDirectoryA : Buffer 문자열에 해당하는 경로..
분석 툴 : x32dbg 입력값을 더하는 시스템그러나 파일 이름에 맞게 random_number를 찾아야 한다. ebp-8, ebp-C : 우리가 입력한 값입력값이 401000의 인자로 들어간다. call을 해서 401000함수로 진입이때, 우리가 입력한 값이 ebp+8, ebp+C로 바뀌어있음⇒ 이전 함수의 ebp 값을 스택에 저장해서 401000의 새로운 스택 프레임을 만들었기 때문에!! add로 두 값을 더해서 return한다다음 함수로 진입하면 다음과 같은 화면을 볼 수 있는데,GetTickCount : cpu의 clock 타임을 가져온다 → 랜덤한 값을 가져올 때 많이 씀eax에 01BE9EA7가 있고, idiv ecx를 하면idiv를 통해 eax에 몫이, ecx에 나머지가 들어간다.하위 연산..
join 한눈에 정리한 사진 # 없어진 기록 찾기SELECT B.ANIMAL_ID, B.NAMEFROM ANIMAL_INS AS A RIGHT JOIN ANIMAL_OUTS AS BON A.ANIMAL_ID = B.ANIMAL_IDWHERE A.ANIMAL_ID IS NULL; 1. RIGHT JOINSELECT FROM TABLE A RIGHT JOIN TABLE BON A.KEY = B.KEYWHERE A.ANIMAL_ID IS NULL; # 있었는데요 없었습니다SELECT A.ANIMAL_ID, A.NAMEFROM ANIMAL_INS AS A INNER JOIN ANIMAL_OUTS AS BON A.ANIMAL_ID = B.ANIMAL_IDWHERE A.DATETIME > B.DATETIMEOR..
실습 준비1. https://day-night.tistory.com/119 에서 1번 컨테이너 생성서버 / 클라이언트 컨테이너를 생성하고 VSCode로 각각 열기 2. 서버와 클라이언트 둘 다 python3 설치apt updateapt install python3 socket은 파이썬 기본 모듈이기 때문에 python3을 설치하고 import하면 됨. 접속 정보server ip : 172.17.0.2server port : 8001client ip : 172.17.0.3client port : 8002 Python Socket으로 전송하고 nc로 받기1. nc를 사용해서 서버 대기server# nc -l -p [서버 포트] 2. client에서 send.py로 소켓 생성import socketprin..
Docker로 컨테이너 두 개 만들어서 네트워크 실습 진행 우선 작업의 편리함을 위해 VSCode에 Docker를 Attach했다.VSCode와 Docker 연동은 요기 참고 >> https://89douner.tistory.com/123 1. 컨테이너 생성하기cmd 혹은 VSCode의 파워쉘 터미널에 아래 명령어를 입력해서 컨테이너 두 개 생성docker run -dit -p 8001:8001 --name server ubuntu:22.04 docker run -dit -p 8002:8002 --name client ubuntu:22.04docker run -dit -p 8001:8001 --name server ubuntu:22.04docker run -dit -p 8002:8002 --name c..
스택을 이용한 문제 '('면 push하고 ')'하면 pop하는 원리를 이용했다. 첫 시도에는 Stack이라는 클래스를 생성해서 만드려고 했는데,클래스 정의하는 걸 안해봐서 자꾸 다른 답이 나왔다 😂 결국 리스트로 스택 구현해서 class 없이 풀었다. 1. '('면 리스트에 append2. ')'면 리스트에서 마지막 값 pop3. pop할 땐 스택의 길이 검사 (len==0?)4. for문으로 문자열 다 돌고 나서 남은 스택 길이 검사 (len!=0) 풀이 코드def solution(s): stack = [] for i in s: if i == "(": stack.append(i) else: if len(stac..
# 흉부외과 또는 일반외과 의사 목록 출력하기SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD,"%Y-%m-%d") AS HIRE_YMDFROM DOCTORWHERE MCDP_CD = 'CS' OR MCDP_CD = 'GS'ORDER BY HIRE_YMD DESC, DR_NAME;1. DATE_FORMATDATE_FORMAT(date, format)date : 포맷할 날짜값format : 날짜를 어떻게 포맷할지 # 과일로 만든 아이스크림 고르기SELECT FLAVORFROM FIRST_HALFWHERE TOTAL_ORDER >= 3000 AND FLAVOR IN (SELECT FLAVOR FROM ICECREAM_INFO WHERE INGREDIENT_..
👾분석 환경 : Ollydbg 우선 crackme3 파일을 실행시켜보자이렇게 프로그램은 끝난다.Ollydbg 분석파일을 열자마자 CreateFileA라는 API 함수 호출이 보인다.CreateFile 함수의 인자를 확인해보자FileName = “abex.l2c”Access = GENERIC_READ (읽기 권한)ShareMode = 0 (다른 프로세스에 공유 불가)pSecurity = NULLMode = OPEN_EXISTING (파일이 존재할 때만 파일을 엶)Attributes = NORMALhTemplateFile = NULL GetFileSize로 파일의 크기도 확인함 → 리턴값 = 파일 사이즈hFile = NULL (파일 사이즈를 알기 위한 해당 파일에 대한 핸들. GENERIC_READ..