[ Algorithm] D-8 구현 문제 풀기

Jifrozen·2021년 7월 6일
1

Algorithm

목록 보기
14/70

최댓값 2562

max = 0
n = 0
for i in range(9):
    data = int(input())
    if data > max:
        max = data
        n = i

print(max, n + 1)

그룹 단어 체커

# https://www.acmicpc.net/problem/1316

n = int(input())
alpha = [0] * 26
data = []
result = 0
for i in range(n):
    data.append(input())

for i in range(n):
    a = list(data[i])
    last = a[0]
    alpha[int(ord(last)) - 97] = 1
    for j in range(1, len(a)):
        if last == a[j]:
            continue
        if alpha[int(ord(a[j])) - 97] == 0:
            last = a[j]
            alpha[int(ord(a[j])) - 97] = 1
        else:
            result -= 1
            break
    alpha = [0] * 26
    result += 1

print(result)

풀이

  1. alpha = [0] * 26 사용햇던 알파벳인지 검사하는 배열
    사용하면 1로 바꿔줌
    alpha[int(ord(last)) - 97] = 1

  2. for 문으로 바로 전에 지나간 문자를 last로 둔다.
    last = a[j]
    그래서 last와 현재 문자를 비교해 같으면 continue 다르면 썻던 알파벳인지 검사한다.

  3. 처음 사용하는 알파벳이면
    if alpha[int(ord(a[j])) - 97] == 0:
    last를 변경하고 썻다고 표시해준다 =1
    중복된 알파벳이면 반복문에서 나온다.

문자열 압축


몰라.....

기둥과 보 설치

def possible(result):
    for x, y, a in result:
        if a == 0:
            if y == 0 or [x - 1, y, 1] in result or [x, y, 1] in result or [x, y - 1, 0] in result:
                continue
            else:
                return False
        else:
            if [x, y - 1, 0] in result or [x + 1, y - 1, 0] in result or (
                    [x - 1, y, 1] in result and [x + 1, y, 1] in result):
                continue
            else:
                return False
    return True


def solution(n, build_frame):
    result = []
    for x, y, a, b in build_frame:
        if b == 0:
            result.remove([x, y, a])
            if not possible(result):
                result.append([x, y, a])
        else:
            result.append([x, y, a])
            if not possible(result):
                result.remove([x, y, a])
    return sorted(result)


print(solution
      (5,
       [[0, 0, 0, 1], [2, 0, 0, 1], [4, 0, 0, 1], [0, 1, 1, 1], [1, 1, 1, 1], [2, 1, 1, 1], [3, 1, 1, 1], [2, 0, 0, 0],
        [1, 1, 1, 0], [2, 2, 0, 1]]
       )
      )
  1. 기둥과 보를 설치 또는 제거한다
  2. 설치 또는 제거를 하기 위해 조건을 파악해야한다
    기둥이 설치가 가능한 조건 ( possible )
    1). 바닥
    2). 설치 왼쪽에 보가 있는 경우
    3). 설치 지점에 보가 있는 경우
    4). 설치 밑에 기둥이 있는 경우
    보가 설치 가능한 조건
    1). 설치 아래 기둥
    2). 설치 오른쪽 아래 기둥
    3). 양옆에 보가 있는경우
  3. 설치 또는 삭제를 우선 한다. possible 조건에서 현재 구조물이 유효한 구조물인지 전체적으로 체크한다. 아니면 설치 -> 삭제 삭제 -> 설치해준다.

    처음엔 하나 함수안에 조건체크랑 구조물 추가 삭제까지 전부 넣어줬는데 책을 보니 나누는게 훨씬 깔끔해 함수로 나눴다.

3개의 댓글

comment-user-thumbnail
2021년 7월 6일

안녕하세요, 김덕우입니다! 아스키코드를 이용해서 푸는 방법이 정말 참신하네요!! 그리고 마지막 문제를 푸시다니 정말...대단합니다....너무 고생하셨어요 오늘!! 내일도 화이팅입니다~

답글 달기
comment-user-thumbnail
2021년 7월 6일

아스키코드로 푸셨군요! 사실 저는 아직 파이썬이 완전히 체화되지 않았는지 아스키코드를 쓰라고 거의 작성되어있는게 아니면 안쓰게 되더라구요..코드가 훨씬 간결해진것 같아요! 오늘도 한 수 배워갑니다:)

답글 달기
comment-user-thumbnail
2021년 7월 7일

안녕하세요 😊입니다!! 마지막 문제 성공하신거,, 정말 존경스러워요👍👍 저는 잘 안되어서 정답 코드를 찾아봤는데 알고리줌 님처럼 계속 노력해보고 싶어요,,!! 오늘도 화이팅입니다👍👍👍

답글 달기