CTFlearn의 열아홉번째 문제
이번엔 프로그래밍 문제이다.
반응형
해킹대회를 참가할때마다 느끼는 거지만
프로그래밍은 해킹하는데 필수로 잘해야 하는것 같다.
어려운 문제들은 반드시 코딩해서 풀어야 하기때문..
프로그래밍 공부도 해야하는데 참 쉽지가 않다.
0의 개수가 3의 배수이거나 1의 개수가 2의 배수인 행의 개수를 찾는것
이것이 이번 문제의 목표이다.
말이 헷갈려서 몇번이나 읽어봤던거 같다.
문제에서 주어지는 data.dat 파일을 열어보면
이렇게 0과 1로 된 데이터들이 10000줄 들어있다.
사람이 일일이 계산하기는 불가능하기 때문에 프로그래밍이 필수이다.
여기서 각 line의 0과 1의 갯수를 센 후,
0의 개수가 3의 배수이거나 1의 개수가 2의 배수인 행를 세어주면 된다.
f = open('data.dat', 'r')
answer = 0
for i in range(10000):
zeronum = 0
onenum = 0
line = f.readline()
for j in range(len(line)):
if line[j] == '0':
zeronum += 1
if line[j] == '1':
onenum += 1
if (zeronum % 3) == 0:
answer += 1
elif (onenum % 2) == 0:
answer += 1
print(answer)
문제푸는 코드는 위와 같다.
좀 지저분할수 있는데
행의 개수를 셀 answer 변수를 하나 생성해주고
f.readline 으로 파일을 한줄씩 읽어와
for 문을 이용해 각 line의 0과 1의 개수를 세서 각각 zeronum, onenum 변수에 저장해준다.
마지막으로 zeronum 을 3으로 나눈 값이 0이거나
onenum 을 2로 나눈 값이 0일 경우
answer 변수에 1씩 더해주면 된다.
코드를 실행시키면 바로 결과가 출력이 된다.
출력된 결과를 제출해주면 된다.
결과 뒤쪽에 코드 실행시간을 같이 출력시켜 봤는데,
10000줄 계산하는데 0.0648초가 걸렸다.
반응형
'워게임 > CTFlearn' 카테고리의 다른 글
[CTFlearn] Git Is Good - 포렌식 (46) | 2022.09.12 |
---|---|
[CTFlearn] HyperStream Test #2 - 암호학 / Bacon (35) | 2022.09.09 |
[CTFlearn] 07601 - 포렌식 / HxD / binwalk (62) | 2022.09.02 |
[CTFlearn] QR Code - MISC / Base64 / ROT13 (46) | 2022.08.28 |
[CTFlearn] BruXOR - 암호학 / XOR (50) | 2022.08.26 |