728x90
728x90
728x90

 
  • 위치
  • 별점 : 4/5
  • 주차여부 : 불가능, 길가에 대야함
  • 메뉴 : 파스타, 화덕피자 등 양식 위주
  • 가격 : 살짝 높은 편
  • 룸식 존재 여부 : 없음
  • 뷰 : 서귀포시 마을 뷰, 햇살이 잘 들어와 런치에 여유로운 분위기 만끽
  • 재방문의사 : 있음
  • 응대 수준 : 친절

레오네핏제리아-가게서 바라본 입구
레오네핏제리아-카운터1 모습
레오네핏제리아-멀리서보이는 화덕의 모습
레오네핏제리아-식전빵의 모습
레오네핏제리아-먼저 나온 파스타의 모습, 까르보나라가 꾸덕하지 않은게 사진에서도 보여지는데...
레오네핏제리아-까르보나라의 자세한 모습, 좀 더 꾸덕하면 좋겠다는 생각
레오네핏제리아-아마트리치아나? 시그니처 파스타의 모습
레오네핏제리아-마르게리따 피자의 모습
레오네핏제리아-마르게리따 피자 가까이 찍은 모습

728x90
  •  후기
    • 식전빵이랑 피자가 엄청 맛있었다.
    • 아마도 여긴 빵맛집
    • 두 파스타 모두 간이 좀 약해서, 간이 약한 걸 좋아하시는 분은 좋아할 듯 하다.
    • 꾸덕파면 아쉬울 것 같다.
    • 이 가게를 떠올리면 한적한 주말 점심이 생각난다. 그런 분위기를 준다.
728x90
728x90

 
    • 위치
 
  • 별점 : 5/5
  • 주차여부 : 없음, 길가에 대야함
  • 메뉴 : 해물라면, 해물파전, 골뱅이무침, 해물파전, 짬뽕순두부, 치즈계란말이, 한치물회, 한치회무침, 마늘닭강정 등
  • 가격 : 약간 높음
  • 룸식 존재 여부 : 존재
  • 뷰 : 서귀포 시골마을 뷰
  • 재방문의사 : 매우높음
  • 응대 수준 : 친절

제주공감-자리에 앉아서 본 메뉴판
제주공감-기본찬과 해물라면의 자태
제주공감-해물라면의 자세한 자태

728x90
  •  후기
    • 해물라면이 엄청 칼칼하다.
      • 완전 맵찔이는 힘들겠지만, 신라면 잘먹을 수 있다면 도전 가능
    • 해장용으로는 딱
    • 국물도 엄청 많이 준다.
    • 고추로 매운맛을 내서 칼칼한게 땡기면 굳
    • 근처 살면 골뱅이 무침에 막걸리 한잔하러도 갈 것 같다.
    • 오징어같은 고명이 적은건 조금 아쉽다. 새우랑 오징어 더 넣어주시면 좋겠어요~
728x90
728x90

 
    • 위치
 
  • 별점 : 5/5
  • 주차여부 : 가능
  • 메뉴 : 당근 케이크, 당근 빙수 더치 아메리카노 등
  • 가격 : 무난
  • 룸식 존재 여부 : 없음
  • 뷰 : 아주 좋음
  • 재방문의사 : 있음
  • 응대 수준 : 평범

카페제주동네-외관모습
카페제주동네-카운터를 마주한 모습
카페제주동네-메뉴판을 마주한 모습
카페제주동네-동창으로 바라본 구좌읍 모습
카페제주동네-통창뷰2
카페제주동네-당근 빙수의 자태
카페제주동네-당근케이크의 자태

728x90
  •  후기
    • 가는 길 자체가 예쁘다. 구좌읍 마을 동네가 조용하고 나중에 여기서 살고 싶다는 생각 들게 만듦
    • 구좌가 당근이 유명하다.
    • 당근 빙수의 당근 향이 강하지 않아 좋다.
    • 빙수의 견과류를 얹어서 한입 베어 물면 아주 깔끔! 엄청 달지 않아 좋다.

 

728x90
728x90

 
    • 위치
 
  • 별점 : 5/5
  • 주차여부 : 가능
  • 메뉴 : 설렁탕, 특설렁탕, 해물 순두부, 우삼겹 김치 순두부, 우삼겹 된장찌개, 소불고기 뚝배기
  • 가격 : 무난
  • 룸식 존재 여부 : 없음
  • 뷰 : 구석진 곳에 있어서, 마치 경기도 외곽 조용한 음식점 가는 기분!
  • 재방문의사 : 매우 높음
  • 응대 수준 : 매우 친절! 젓가락 떨어지면 그 소리에 바로 가져다 주시는 센스

도담설렁탕-메뉴판
도담설렁탕-기본찬
도담설렁탕-만두
도담설렁탕-특설렁탕의 자태

728x90
  •  후기
    • 자전거를 엄청 오래 타고 먹어서 맛있냐? 아니라고 믿음 그냥 맛있는 곳
    • 김치 맛있어서 두 번 먹음
    • 고추 빼고 밑반찬 다 먹음
    • 고추 매우 매움
    • 너무 맛있어서, 글 쓰는데 또 먹고 싶은 곳
728x90
728x90

 
    • 위치
 
  • 별점 : 3.5 / 5
  • 주차여부 : 없음, 길가에 대야함
  • 메뉴 : 닭칼국수, 김치칼국수, 해물칼국수, 김밥
  • 가격 : 칼국수치고는 비싼 가격대(2023.05. 기준 11,000원)
  • 룸식 존재 여부 : 없음
  • 뷰 : 없음
  • 재방문의사 : 존재
  • 응대 수준 : 평범

명동손칼국수-입구에서 본 모습
명동손칼국수-사라진 수제비의 흔적
명동손칼국수-메뉴판, 사라진 수제비의 흔적2
명동손칼국수-딱봐도 맛있어보이는 김치와 딱봐도 평범해보이는 김밥, 그리고 내가 좋아하는 썰은 고추
명동손칼국수-플레인 김밥의 단면
명동손칼국수-닭칼국수의 자태

 

728x90
  •  후기
    • 칼국수가 무난하다.
    • 썰은 매운 고추를 주셔서 기호에 맞게 칼칼한 정도를 만들어 먹을 수 있다.
    • 육수 자체에 간이 좀 되어 있는 편이다.
    • 닭고기 대부분 뻑뻑살인 점이 아쉽다.
    • 칼국수 집은 김치가 생명, 김치가 맛있었다.
    • 11,000원의 가격은 별1개를 깍게 만든다.
728x90
728x90

 
 
    • 위치
 
  • 별점 : 4.5/5
  • 주차여부 : 없음, 길가에 대야함
  • 메뉴 : 중식 모두, 짜장면이 특히 맛있다. 다소 좀 짠 감이 있지만, 밍밍한 짜장면 일리는 없다. 해물간짜장에도 돼지고기가 많이 들어있어서 항상 해물간짜장을 먹었다.
  • 가격 : 무난
  • 룸식 존재 여부 : 없음
  • 뷰 : 없음
  • 재방문의사 : 매우 높음
  • 응대 수준 : Not bad

연예인반점-메뉴판
연예인반점-가게서 본 풍경
연예인반점-기본찬
연예인반점-볶음밥의 자태
연예인반점-해물간짜장곱빼기의 모습

728x90
  •  후기
    • 연동에서 짜장면이 맛있는 곳이 근처 없었는데, 발견 후 2주에 한 번씩은 가는 곳
    • 해물간짜장을 시키면 해물과 돼지고기 모두 많이 먹을 수 있는 곳
    • 아마 냉동해서 잘라서 하나의 계란으로 여러 후라이를 만든 것만 같은 계란후아이의 크기가 아쉬움
    • 해물간짜장 곱빼기는 시키지 않는게 좋다. 너무 배부르다!
728x90
728x90

 
 
    • 위치
 
  • 별점 : 4.5/5
  • 주차여부 : 불가, 길가에 대야함
  • 메뉴 : 보쌈정식, 곤드레육개장, 순두부찌개, 콩비지찌개, 김치찌개, 동태전골, 오징어볶음, 콩국수 등
  • 가격 : 무난
  • 룸식 존재 여부 : 없음
  • 뷰 : 없음
  • 재방문의사 : 매우 높음
  • 응대 수준 : 친절

모퉁이에머릿돌-메뉴판
모퉁이에머릿돌-기본찬
모퉁이에머릿돌-서비스로 주신 계란후라이
모퉁이에머릿돌-콩비지찌개의자태

728x90
  •  후기
    • 기본찬들이 보기보다 간이 쌔지가 않다.
      • 그래서 반찬을 많이 먹게 되고, 리필도 잘해주신다.
    • 할머니께서 해주시는 집밥같다.
    • 콩비지찌개가 특히 맛있다.
    • 한달에 세,네 번은 가는 듯 하다.

 

728x90
728x90

삼각달팽이

from math import sqrt

def n_to_total(n):
    # 4->10
    # 5->15
    # 6->21
    # n->n(n+1)/2
    return n*(n+1) // 2

def remains_to_edge_size(remains):
    # 1->1, 예외처리
    # 3->1
    # 6->2
    # 10->3
    # 15->4
    # 21->5
    # 28->6
    # 36->7
    # n(n+1)/2 -> n-1
    return round(((-1 + sqrt(1+8*remains))/ 2) - 1)

def edge_size_consumed(edge_size):
    return 3 * edge_size

def get_first(start_val, start_row_idx, start_col_idx, edge_size):
    return list(zip([*range(start_val, start_val + edge_size)], [*range(start_row_idx, start_row_idx + edge_size)], [start_col_idx]*(edge_size)))

def get_second(start_val, start_row_idx, start_col_idx, edge_size):
    return list(zip([*range(start_val+edge_size, start_val+2*edge_size)], [start_row_idx+edge_size] * edge_size, [*range(start_col_idx, start_col_idx + edge_size)]))

def get_third(start_val, start_row_idx, start_col_idx, edge_size):
    return list(zip([*range(start_val+2*edge_size, start_val+3*edge_size)], [*range(start_row_idx+edge_size, start_row_idx, -1)], [*range(start_col_idx+edge_size, start_col_idx, -1)]))

def solution(n):
    if n == 1:
        return [1]
    answer = [[0]*i for i in range(1, 1 + n)]
    funcs = [get_first, get_second, get_third]

    start_val = 1
    start_row_idx = 0  # increment : 2
    start_col_idx = 0  # increment : 1
    remains = n_to_total(n)
    edge_size = remains_to_edge_size(remains)    

    while (remains):
        for func in funcs:
            val_row_cols = func(start_val, start_row_idx, start_col_idx, edge_size)
            for val, row, col in val_row_cols:
                answer[row][col] = val
        consumed = edge_size_consumed(edge_size)
        start_val += consumed
        start_row_idx += 2
        start_col_idx += 1
        remains -= consumed
        edge_size = remains_to_edge_size(remains)
        if remains == 1:
            answer[start_row_idx][start_col_idx] = start_val
            remains -= 1

    answer = [x for sublist in answer for x in sublist]
    return answer
  • 포인트
    • 각 삼각형을 외곽부터 layer-1, layer-2, …
    • 각 layer마다 세 개의 변으로 나눠 처리(왼쪽, 밑, 오른쪽을 first, second, third)
    • 이런 군수열방식이 아닌, 방향 개념 도입해서 풀면 더 간단할 듯
728x90
728x90
def get_rotation_candidates(mat, query):
    x1, y1, x2, y2 = query
    # (x, y, val)
    first = [(x1-1, y1 -1 + i, mat[x1-1][y1-1+i]) for i in range(y2-y1)]
    second = [(x1-1+i, y2-1, mat[x1-1+i][y2-1]) for i in range(x2-x1)]
    third = [(x2-1, y2-1-i, mat[x2-1][y2-1-i]) for i in range(y2-y1)]
    fourth = [(x2-1-i,y1-1, mat[x2-1-i][y1-1]) for i in range(x2-x1)]    
    return first, second, third, fourth

def get_min(first, second, third, fourth):
    return min(
        min(first, key=lambda x: x[2])[2],
        min(second, key=lambda x: x[2])[2], 
        min(third, key=lambda x: x[2])[2], 
        min(fourth, key=lambda x: x[2])[2], 
    )

def rotate(mat, first, second, third, fourth):
    mat[first[0][0]][first[0][1]] = fourth[-1][-1]
    mat[second[0][0]][second[0][1]] = first[-1][-1]
    mat[third[0][0]][third[0][1]] = second[-1][-1]
    mat[fourth[0][0]][fourth[0][1]] = third[-1][-1]

    if len(first) >= 2:
        for i in range(1, len(first)):
            new_val = first[i-1][-1]
            mat[first[i][0]][first[i][1]] = new_val
    if len(second) >= 2:
        for i in range(1, len(second)):
            new_val = second[i-1][-1]
            mat[second[i][0]][second[i][1]] = new_val
    if len(third) >= 2:
        for i in range(1, len(third)):
            new_val = third[i-1][-1]
            mat[third[i][0]][third[i][1]] = new_val
    if len(fourth) >= 2:
        for i in range(1, len(fourth)):
            new_val = fourth[i-1][-1]
            mat[fourth[i][0]][fourth[i][1]] = new_val    
    return mat

def solution(rows, columns, queries):
    init_mat = [[i for i in range(1 + (j-1)*columns, 1 + j * columns)] for j in range(1, 1 + rows)]
    mins = []
    for query in queries:
        first, second, third, fourth = get_rotation_candidates(init_mat, query)
        mins.append(get_min(first, second, third, fourth))
        init_mat = rotate(init_mat, first, second, third, fourth)
    return mins
  • 포인트
    • min(listOfTuples, key=lambda x: x[2])[2] 을 통해 third element 최솟값 얻기
    • 테두리를 4분할해서 처리, 각 분할마다 첫점과 그 외를 나눠 해결
728x90
728x90
def calc_meet_x_y(line1, line2):
    A, B, E = line1
    C, D, F = line2
    AD_BC = A*D - B*C
    if AD_BC == 0:
        return None
    BF_ED = B*F - E*D
    EC_AF = E*C - A*F
    return (BF_ED)/(AD_BC), (EC_AF)/(AD_BC)

def isinteger(x):
    return int(x) == x

def transform_to_new_2d(point, max_min):
    x, y = point
    return x - max_min['min_x'], y - max_min['min_y']

def solution(line):
    max_min = {}
    met_points = []
    for outer_idx in range(len(line)):
        line1 = line[outer_idx]
        for inner_idx in range(outer_idx+1, len(line), 1):
            line2 = line[inner_idx]
            calc = calc_meet_x_y(line1, line2)
            if calc:
                x, y = calc
                if isinteger(x) and isinteger(y):
                    x, y = int(x), int(y)
                    if max_min.get('max_x', x) <= x:
                        max_min['max_x'] = x
                    if max_min.get('max_y', y) <= y:
                        max_min['max_y'] = y
                    if max_min.get('min_x', x) >= x:
                        max_min['min_x'] = x
                    if max_min.get('min_y', y) >= y:
                        max_min['min_y'] = y
                    met_points.append((x,y))


    outer_array_len = max_min['max_y'] - max_min['min_y'] + 1
    inner_array_len = max_min['max_x'] - max_min['min_x'] + 1

    answer = [["."]*inner_array_len for _ in range(outer_array_len)]
    for point in met_points:
        x, y = transform_to_new_2d(point, max_min)
        answer[y][x] = '*'
    answer = [''.join(row) for row in answer]
    return answer[::-1]
  • 포인트
    • numeric x가 integer인지 확인은 int(x) == x
    • 계속 max_x, max_y, min_x, min_y를 추적하기
    • string은 immutable이니까 2d-array로 answer template 만들기(not 1d of str)
728x90

+ Recent posts