본문 바로가기

전체 글91

[Python] 파이썬으로 스도쿠 문제 풀기 갑자기 스도쿠??대학을 졸업하고 1년 동안 취준 끝에 판교에 있는 회사에 AI 엔지니어로 입사하게 되었다.서울에서 통근을 하며 1시간 동안 무엇을 할까 하다가 무슨 바람이 불었는지 요즘 스도쿠에 빠졌다.지하철에 있는 시간 동안 쉬운 문제는 5분, 어려운 문제는 10~15분 문제를 풀게 되는데출, 퇴근하면서 약 8문제 정도 푸는 것 같다.지루한 출, 퇴근길이 그나마 시간을 빠르게 해주는 것 같아 나름 괜찮다. 참고로 내가 스도쿠를 푸는 사이트는 이곳이다.https://sudoku.com/ko 지금 무료 스도쿠 퍼즐을 즐겨보세요!스도쿠의 목표는 9×9 격자를 숫자로 채워, 각 행과 열과 3×3구역이 1에서 9까지의 숫자 모두를 포함하도록 하는 것입니다. 게임을 시작하면, 9×9 격자의 몇몇 칸은 채워져 있습.. 2024. 6. 9.
[Python] 배열에 기록하여 문제 풀기 배열의 적절한 위치에 원하는 값을 기록하여 문제를 해결한다. 1. 시간과 위치 - A와 B가 1초에 1m씩 움직인다. - A는 5초 동안 앞으로 갔다가 4초 동안 뒤로 가고 3초 동안 앞으로 간다. - B는 3초 동안 뒤로 갔다가 7초 동안 앞으로 가고 2초 동안 뒤로 간다. - A와 B가 만나게 되는 지점은 몇 초일까? - A와 B가 만나기 위해서는 시간과 위치가 같아지는 시점이 생겨야 한다. - 위치만 표시하게 되면 A와 B가 언제 만나는지 알기 쉽지 않다. - 다른 방법으로는 1초 단위로 A와 B의 위치를 동시에 움직이며 시뮬레이션을 한다. - 하지만 시간에 따라 어느 방향으로 이동하는 것을 판단해야 하므로 쉽지 않다. - 따라서 A, B를 개별적으로 1초 단위로 어느 위치에 있는지 배열에 기록하며.. 2023. 12. 18.
[Python] 최장 연속 부분 수열 1. 숫자가 동일한 연속 부분 수열 - 연속 부분 수열이란 어떤 수열에서 특정 구간에 속하는 수들을 모두 뽑았을 때 나오는 부분 수열이다. - 연속해서 나오는 같은 숫자를 한 묶음이라 할 때, 총 몇 개의 묶음이 나오는지 구하라. - 수열은 다음과 같다. - 수열에서 [1,1,1], [2,2], [3,3,3,3], [2] 총 4개의 묶음이 있다는 것을 알 수 있다. - 그림에서 빨간색 테두리는 새로운 묶음이 시작되는 index이다. - 따라서 새로운 묶음이 시작되는 index 개수가 답이 되는 것을 알 수 있다. - 새로운 묶음의 특징은 2가지가 있다. - 첫 번째, 직전에 나온 숫자와 다른 숫자가 나왔다. - 두 번째, index가 0일 때 시작된다. - 2가지 조건에 만족하면 개수를 증가시킨다. ar.. 2023. 11. 11.
[Python] 사각형 넓이 문제 - 이중 배열 이용. 겹치는 영역. 겹치지 않는 영역. 최소 사각형 넓이 1. 사각형 넓이 구하기 - 예를 들어 좌표 (2, 3)과 (5, 7)이 각각 사각형의 좌측 하단과 우측 상단의 좌표일 때 넓이를 구해야 한다. - 수식을 사용하면 가로 3 (=5-2), 세로 4 (=7-3)이기 때문에 넓이는 12이다. - 다른 방법으로는 2차원 배열을 이용하는 것이다. - 두 모서리가 (2, 3), (5, 7)이므로 배열의 2행 3열, 5행 7 열이라 생각한다. - 2차원 배열이 8행 8열이 있다고 가정하고 모든 원소는 0이다. - 이중 반복문을 사용해 2행 3열부터 5행 7열에서 각각 1행 1열을 뺀 4행 6열까지 순회한다. - 순회하며 개수를 하나씩 증가한다. - 총개수가 사각형의 넓이가 된다. - 따라서 좌측 하단 모서리가 (x1, y1)이고 우측 상단 모서리가 (x2, y2)인.. 2023. 11. 4.
[Python] 특정 구간의 개수 구하기 - 겹치는 지점, 겹치는 구간 1. 겹치는 지점 구하기 - 3개의 선분은 각각 [2, 6], [3, 8], [6, 9] 구간에 놓여 있다. - 가장 많이 겹치는 지점과 개수를 구하기 위해서 어떻게 해야 할까? - 위 그림에서 겹치는 개수는 1개이고 지점은 6이다. - 코드로 나타내면 다음과 같다. n = int(input()) max_point = -1 arr = [] # 구간을 입력. 끝점의 최대값을 구함. 구간들을 리스트에 삽입 for _ in range(n): x, y = map(int, input().split()) max_point = max(max_point, y) arr.append((x, y)) # 끝점의 최대값의 크기만큼 0인 원소의 리스트를 생성 points = [0 for _ in range(max_point+1).. 2023. 10. 29.
[Python] 진수 변환 - 2진법 표현, 10진법 표현, 진수에서 진수 변환, 아스키 코드 1. 2진법으로 표현하기 - 숫자를 2로 나누어 몫과 나머지를 구한다. - 몫을 계속 2로 나누고 몫이 1일 때 1부터 지금까지 구한 나머지를 거꾸로 순서대로 적는다. - 예를 들어, 50의 2진법을 구한다면 다음과 같다. - 따라서 50을 2진법으로 표현하면 110010이 된다. - 코드로 표현하면 다음과 같다. n = int(input()) binary = [] while n >= 2: binary.append(n % 2) n //= 2 binary.append(n) print(''.join(map(str, binary[::-1]))) >> 50 110010 - n을 2로 계속 나누어 나머지를 binary 리스트에 저장한다. - n을 2로 나눈 몫으로 갱신하고 n이 1이 될 때까지 반복한다. - n=.. 2023. 10. 23.