no image
[백준 2869번 문제, 파이썬3] 달팽이는 올라가고 싶다
문제 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. 코드 import math A, B, V = map(int, input().split()) result = math.ceil((V - A) / (A - B)) + 1 print(result..
2023.05.18
no image
안드로이드 틱택토 앱 게임 만들기 미니맥스 알고리즘 인공지능 #0
동아리 대축제 부스 전시에 사용하려고 만든 틱택토 앱입니다. 안드로이드 스튜디오로 제작하였으며 안드로이드 기기에서만 동작합니다... 틱택토 게임의 이름은 많이들 들어보셨을텐데 실제 게임 방법은 잘 모르더라구요. 쉽게말하면 3목입니다. 오목은 5개의 돌이 가로 세로 혹은 대각선으로 이어지면 되는데 틱택토는 마찬가지로 3개만 이어지면 됩니다 그래서 틱택토의 경우의 수는 9! = 362,880 입니다. 개발 목표는 사용자가 놓은 수에 따라 인공지능이 최적의 수를 선택하여 게임을 진행하면 되겠습니다. 예전이라면 많이 어려웠겠지만 인공지능 수업 덕분에 미니맥스 알고리즘으로 틱택토 게임을 구현하는데 도움이 되었네요. 먼저 파이썬으로 틱택토 인공지능을 구현하고 안드로이드 스튜디오에서 자바 코드로 변환하는 과정을 거쳐..
2023.05.18
no image
2023년 경상국립대 5월 동아리축제 이카루스 부스 활동
이번 23년도 5월에 경상국립대학교 총동아리연합회 주관 동아리 대축제에 우리 이카루스 동아리가 부스 활동에 참여하기로 했고 비록 하루동안이지만 그 하루를 위해 멋진 동아리원들과 함께 부스를 준비했고 결과도 성공적이었다고 말할수 있을만큼 좋았다! 그냥 참여 안하고 지나갈 수 있었겠지만 재밌는 동아리 축제날이 되었던거같다! 우리 회장도 이것저것 설명듣고 회의참여하느라 고생많았고 동아리 활동에 많이 신경써준 총무도 고생많았고 무엇보다 대가 없이 부스에 참여해준 우리 동아리 멤버들 덕분에 의미있는 날이되었던것같다 ! 우리 이카루스는 나름 31년 전부터 활동하던 동아리였는데 사실상 이전에는 유령동아리였다고 볼수있었지만 이번 23년부터 제대로된 목적을 갖고 활동하기로 했다. 동아리 목적은 멘토 멘티 활동과 함께 코..
2023.05.18
no image
[백준 1032번 문제, 파이썬3] 명령 프롬프트
문제 문제 시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다. dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다. 이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴..
2023.05.16
no image
[백준 1436번 문제, 파이썬3] 영화감독 숌
문제 문제 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, ..
2023.05.15
no image
[백준 1259번 문제, 파이썬3] 팰린드롬수
문제 문제 어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다. 수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. 출력 각 줄마다..
2023.05.15
no image
[백준 1018번 문제, 파이썬3] 체스판 다시 칠하기
문제 문제 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 ..
2023.05.14
no image
[백준 2908번 문제, 파이썬3] 상수
문제 문제 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다. 상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다. 두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다. 출력 첫째 줄에 상수의 대답을 출력한다..
2023.05.14
728x90
반응형

문제

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.


코드

import math

A, B, V = map(int, input().split())

result = math.ceil((V - A) / (A - B)) + 1
print(result)

해결

하루 낮에 A 만큼 올라가는데 첫날 하루든 마지막 하루든 미리 빼고 그것을 하루에 올라가는 높이인 A - B 만큼 나눈다 이것을 올림으로 만들고 미리 올라간 하루를 더하면 답이 된다


참고

링크

 

 

 

728x90
반응형
728x90
반응형

 

동아리 대축제 부스 전시에 사용하려고 만든 틱택토 앱입니다.

안드로이드 스튜디오로 제작하였으며 안드로이드 기기에서만 동작합니다...

 

틱택토 게임의 이름은 많이들 들어보셨을텐데 실제 게임 방법은 잘 모르더라구요. 쉽게말하면 3목입니다. 

오목은 5개의 돌이 가로 세로 혹은 대각선으로 이어지면 되는데 틱택토는 마찬가지로 3개만 이어지면 됩니다

 

그래서 틱택토의 경우의 수는 9! = 362,880 입니다. 개발 목표는 사용자가 놓은 수에 따라 인공지능이 최적의 수를 선택하여 게임을 진행하면 되겠습니다.

 

예전이라면 많이 어려웠겠지만 인공지능 수업 덕분에 미니맥스 알고리즘으로 틱택토 게임을 구현하는데 도움이 되었네요.

먼저 파이썬으로 틱택토 인공지능을 구현하고 안드로이드 스튜디오에서 자바 코드로 변환하는 과정을 거쳐서

안드로이드 앱에 UI를 넣고 터치를 하면 X (사용자 턴)를 칠하는 기능을 구현했습니다.

 

 

실제 구동 영상입니다. 틱택토 게임은 3 X 3 타일에서 진행되는 게임이므로 서로 최상의 수를 선택한다면 항상 비기는 게임이됩니다.. 그래서 이걸로 부스 전시를 한다면 항상 비기는 게임이 되거나 지는 게임이 될텐데

그러면 별로 재미는 없겠죠 그래서 난이도 조절이 필요했습니다

 

 

5% 확률로 AI는 엉뚱한 수를 두는 코드를 넣게 되면 가끔은 사용자가 이기겠죠... 다음에 방학에 앱을 좀 더 업그레이드 해서 메뉴도 만들고 타이틀도 만들고 딱히 별 기능은 없지만 인터넷 없이 동작 가능한 틱택토 인공지능 게임으로 출시를 해보려고 합니다.

 

 

지금은 부스 전시용으로 앱을 만든거라 딱히 기능은 틱택토 인공지능과 타일 터치 기능, 순전히 틱택토 관련 기능만 만들었습니다. 차차 업그레이드를 하거나 아니면 여기서 뭍히겠죠 ㅎㅎ  

 

 

타일 터치는 버튼말고 TableLayout에 TextView를 넣어서 온클릭 리스너로 만들었습니다... 그리고 백그라운드로 조금 꾸미니 나름 괜찮더군요

 

 

틱택토에 대한 일반적인 코드는 인터넷에도 많고 gpt에게 부탁해도 쉽게 나오니까 따로 코드를 전부 설명하는건 피해야겠습니다

 

 

그냥 이제 틱택토 인공지능 코드만 살짝 올려놓겠습니다. 미니맥스 알고리즘으로 만들었고 간단하게 설명하면 자신에게는 최선의 수를 선택하게끔하고 상대에게는 그 반대으 수를 선택하게끔 하는 알고리즘이죠 

 

다음에 앱을 업데이트 하면 그때 또 일지를 남겨야겠네요

아무튼 부스하면서 잘돼서 다행이다!

 

728x90
반응형
728x90
반응형

 

이번 23년도 5월에 경상국립대학교 총동아리연합회 주관 동아리 대축제에 우리 이카루스 동아리가 부스 활동에 참여하기로 했고 비록 하루동안이지만 그 하루를 위해 멋진 동아리원들과 함께 부스를 준비했고 결과도 성공적이었다고 말할수 있을만큼 좋았다! 

 

 

그냥 참여 안하고 지나갈 수 있었겠지만 재밌는 동아리 축제날이 되었던거같다! 우리 회장도 이것저것 설명듣고 회의참여하느라 고생많았고 동아리 활동에 많이 신경써준 총무도 고생많았고 무엇보다 대가 없이 부스에 참여해준 우리 동아리 멤버들 덕분에 의미있는 날이되었던것같다 !

 

 

우리 이카루스는 나름 31년 전부터 활동하던 동아리였는데 사실상 이전에는 유령동아리였다고 볼수있었지만 이번 23년부터 제대로된 목적을 갖고 활동하기로 했다. 동아리 목적은 멘토 멘티 활동과 함께 코딩테스트 문제를 풀면서 코딩 실력 향상과 진로 탐색 그리고 멤버들과 다양한 공모전 참여를 통해 대내외 활동 실적을 통해 자신의 커리어를 쌓을 수 있도록 하고자했다! 

 

이번 축제에서 우리 이카루스 동아리는 시각적으로 잘 보여줄 수 있는 자신이 만든 게임을 시연하고 틱택토 인공지능 게임과 블랙잭 게임으로 내기 게임을 한 후 동아리 퀴즈를 맞추면 상품을 받을 수 있는 부스를 구상했었다

 

나는 이전에 만든 공피하기 게임과 리듬 게임 그리고 이번에 인공지능 시간에 배운 미니맥스 알고리즘으로 틱택토 게임을 만들어서 부스에 활용했다

 

 

거의 오전 9시 부터 준비했는데 아침은 역시 사람들이 적어서 나름 선선했다. 혹시나 부스가 인기가 없으면 어떻게 하지 했는데 우리 동아리 천사 멤버 두명이 열심히 호객을 해준 덕분에 사람들이 끊이질않았고 바쁜데도 재밌었다! 

 

 

우리 부스를 체험하고 후기를 적어달라고 했는데 정말 고맙게도 많은 분들이 잘적어주셨다! 생각에 남는건 리듬게임에 진심이신분들이 은근 계셨고 내가 만든 게임에 진심으로 리뷰해주셔서 고마웠다! 

 

우리 이카루스 동아리 부스를 참여해주셔서 모든 분들게 고맙습니다. 덕분에 우리도 재밌었던 것 같네요! 그리고 무탈하게 동아리 축제를 총괄해준 회장과 총무에게 고맙고 동아리 부스 활동을 도와준 우리 이카루스 동아리 멤버분들 너무 감사합니다~!

 

 

728x90
반응형
728x90
반응형

문제

문제

시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.

입력

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.

출력

첫째 줄에 패턴을 출력하면 된다.


코드

line_list = [input() for i in range(int(input()))]
diff_index_list = []
for i in range(len(line_list[0])):
    for j in range(len(line_list) - 1):
        if line_list[j][i] != line_list[j - 1][i]:
            diff_index_list.append(i)
            break

answer = ['?' if i in diff_index_list else line_list[0][i] for i in range(len(line_list[0]))]
print(''.join(answer))

해결

문자열 행과 열을 비교하면서 다른 문자가 나오면 해당 인덱스를 리스트에 추가하고 해당 리스트의 인덱스를 문자열에서 ?로 바꿔주면 된다


참고

링크

 

 

 

728x90
반응형
728x90
반응형

문제

문제

666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.

종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 이다. 따라서, 숌은 첫 번째 영화의 제목은 "세상의 종말 666", 두 번째 영화의 제목은 "세상의 종말 1666"와 같이 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

입력

첫째 줄에 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 N번째 영화의 제목에 들어간 수를 출력한다.


코드

count = int(input())

index = 0
result = 665

while index < count:
    result += 1
    string = str(result)
    for i in range(len(string) - 3 + 1):
        if string[i:i + 3] == '666':
            index += 1
            break

print(result)

해결

뭔가 기가막힌 방법은 떠오르지 않아서 그냥 입력된 n 번째 만큼 666 종말의 수를 카운트 해서 n 번째가 되면 출력하는 코드로 만들어봤는데 

 

 

시간 진짜 오래걸린다...

 

종말의 수 확인 방법은 for문을 3칸씩 진행했을 때 될 수 있는 만큼 길이 - 3 + 1만큼 반복하고

string[i:i+3]을 파싱해서 이게 666이랑 같으면 종말의수로 체크하고 인덱스를 증가시켜줬다.


참고

링크

 

 

 

728x90
반응형
728x90
반응형

문제

문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.

수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.

입력

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

출력

각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.


코드

while True:
    line = input()
    if line == '0':
        break

    # 입력 받은 수를 반전해서 하나씩 비교함
    reversed_line = ''.join(reversed(line))

    for c in range(len(line)):
        if line[c] != reversed_line[c]:
            print('no')
            break

    else:
        print('yes')

해결

어렵게 생각하지말고 그냥 반전시켜서 풀면된다


참고

링크

 

 

 

728x90
반응형
728x90
반응형

문제

문제

 

1018번: 체스판 다시 칠하기

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

www.acmicpc.net

지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다.

체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다.

보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8*8 크기는 아무데서나 골라도 된다. 지민이가 다시 칠해야 하는 정사각형의 최소 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.

출력

첫째 줄에 지민이가 다시 칠해야 하는 정사각형 개수의 최솟값을 출력한다.


코드

PATTERN_LIST = ['BWBWBWBW', 'WBWBWBWB']    # 체스판에서 나올 수 있는 패턴 미리 정의

N, M = map(int, input().split())  # 세로 X 가로
board = [input() for i in range(N)]

# 주어진 보드에서 만들 수 있는 8 X 8 보드로 잘라서 만듬
result_board = []
for i in range(N - 8 + 1):
    for j in range(M - 8 + 1):
        tmp_board = []
        for k in range(8):
            tmp_board.append(board[i + k][j:j + 8])
        result_board.append(tmp_board)

# 만들어진 보드를 패턴과 비교하여 칠해야하는 보드 개수를 리스트에 담음
answer_list = []
for board_data in result_board:
    # diff_count_list[0]은 시작이 B인 경우, 1은 시작이 W인 경우
    diff_count_list = [0, 0]

    # PATTERN_LIST 두가지 모두 봐야함
    for index, pattern in enumerate(board_data):
        for color in range(8):
            if index % 2 == 0:
                # 현재 인덱스가 짝수, 홀수를 나누고 시작이 B, W 인 경우를 또 나눈다.
                if pattern[color] != PATTERN_LIST[0][color]:
                    diff_count_list[0] += 1

                if pattern[color] != PATTERN_LIST[1][color]:
                    diff_count_list[1] += 1

            else:
                if pattern[color] != PATTERN_LIST[1][color]:
                    diff_count_list[0] += 1

                if pattern[color] != PATTERN_LIST[0][color]:
                    diff_count_list[1] += 1

    # result_board의 반복이 한번 끝나면 쪼갰던 보드 하나를 다 체크 한 것
    # diff_count_list 에서 가장 최소 값을 answer_list에 넣고
    # 그것 중 최소 값을 출력 값으로 반환하면 된다.
    answer_list.append(min(diff_count_list))

print(min(answer_list))    # 정답 출력

해결

검은색과 흰색의 사각형이 칠해져있는 보드가 있을 때 이걸 체스판으로 만들려고 한다. 이 때 검은색과 흰색은 랜덤으로 칠해져있는데 최소로 다시 칠할 수 있는 수를 구하는게 이 문제가 원하는 출력이다.

 

그러면 처음 생각한건 보드의 가로 X 세로는 8 이상이기 때문에 8 X 8 보드로 나눌 수 있는 만큼 쪼개고

그 안에서 보드 패턴과 비교하여 다른 수를 센다음 최소값을 출력하면 되지 않을까 생각했다

 

보드를 8 X 8로 쪼개는 코드만 만들게 되면 안에서 비교하는건 자유롭게 해도된다


참고

 

 

 

728x90
반응형
728x90
반응형

문제

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력

첫째 줄에 상수의 대답을 출력한다.


코드

import sys

numbers = sys.stdin.readline().split()

# 입력 받은 숫자 두개를 reversed 메서드로 반전시킨다
# reversed 메서드를 사용하면 reversed 객체가 되기 때문에
# ''.join 메서드로 문자열로 만들어주고 int 메서드로 숫자로 만들어야한다
numbers = [int(''.join(reversed(i))) for i in numbers]

print(max(numbers))

해결

생각


참고

링크

 

 

 

728x90
반응형