워게임/CTFlearn

[CTFlearn] Simple Programming - 프로그래밍 / Python

SecurityMan 2022. 9. 5. 11:00

 

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초가 걸렸다.

반응형