エンコーディングテストの実装:シミュレーションと完全なナビゲーション


これは私がナドンビンで聞いた内容に基づいて勉強した投稿です.

✔実現とは何ですか?


実装は,頭の中のアルゴリズムを実際のコードに変換する過程である.したがって,コンピュータが実行できる作業を実現することは必須のプロセスである.
アルゴリズムでは,実装タイプの問題とは,解答を容易に考えられるがソースコードに変換することが困難な問題を指す.

✔問題1:上下左右


AはN X Nサイズの正方形空間に立っている.そしてこの空間は1×1の大きさの正方形に分けられる.一番左上の座標は(1,1)、一番右下の座標は(N,N)です.始点座標は常に(1,1)であり、Aは上、下、左、右方向に移動することができる.(1<=N<=100,1<=移動回数<=100)
移動計画書にはL,R,U,Dの文字が繰り返し書かれています.
L:左に1マス移動
R:1マス右に移動
U:1つ上へ移動
D:1マス下に移動
次はN=5の地図と計画書です.

👉 トラブルシューティングプロセス

  • シリーズコマンドに従ってオブジェクトを移動することから、シミュレーションタイプに分けることもできます.
  • まず移動計画書の文字を実際のx,yが移動できる数字に変換する.
  • for文を用いて,計画書順にx,y移動を許可する.
  • # N 입력받기
    n = int(input())
    x, y = 1, 1 #현재위치
    # plan 입력받기
    plans = input().split()
    
    # L, R, U, D에 따른 이동 방향
    dx = [0, 0, -1, 1] # x축 direction
    dy = [-1, 1, 0, 0] # y축 direction
    move_types = ['L', 'R', 'U', 'D']
    
    # 이동 계획을 하나씩 확인
    for plan in plans:
        # 이동 후 좌표 구하기
        for i in range(len(move_types)):
            if plan == move_types[i]:
                nx = x + dx[i]
                ny = y + dy[i]
        # 공간을 벗어나는 경우 무시
        if nx < 1 or ny < 1 or nx > n or ny > n:
            continue
        # 이동 수행
        x, y = nx, ny
    
    print(x, y)

    ✔問題2:視点


    整数Nを入力すると、00時00分00秒からN時59分59秒までの全時刻のうち、1つでも3が含まれている全ての場合の個数を求める.

    👉 トラブルシューティングプロセス

  • は、可能な限り全ての数をチェックする探索方法であり、この点からも完全探索タイプに分けることができる.
  • すべての時刻を1つずつ印刷し、対応する時刻が現れたときにcountを上げます.
    # N를 입력받기(hour에 해당함)
    hour = int(input())
    
    for i in range (hour+1): # 시
    	for j in range(60): # 분
        	for k in range(60): # 초
            	# 3이 시각안에 포함되어있다면
            	if '3' in str(i) + str(j) + str(k):
                    count += 1
    print(count)

    ✔問題3:王室の夜


    8×8座標平面では、格子はL字形でしか移動できず、座標平面を超えてはならない.
    特定の場所では、次の2つのケースに移動できます.(L字型)
    1.2つのセルを水平に移動し、1つのセルを垂直に移動
    2.垂直に2つのグリッドを移動し、水平に1つのグリッドを移動
    8 X 8座標平面上にあるノードの位置が指定されている場合、そのノードが移動可能な数が出力される.

    👉 トラブルシューティングプロセス


    ナイトの位置では,8種類の移動方向のうち可能な移動方向数を求める.
    night = input()
    
    # 행열과 xy는 반대
    # 나이트의 행
    night_row = int(night[1]) 
    # 나이트의 열
    # 열은 a가 시작점이기에 a로 부터 얼마나 떨어져있는지 계산해야함
    night_column = int(ord(night[0])) - int(ord('a')) + 1 
    
    #나이트가 이동할 수 있는 방향 8개
    steps = [(2,1),(1,2),(2,-1),(-1,2),(-2,1),(1,-2),(-2,-1),(-1,-2)]
    
    count = 0
    for step in steps:
        # 이동하고자 하는 위치 확인
        next_row = row + step[0]
        next_column = column + step[1]
        # 해당 위치로 이동이 가능하다면 카운트 증가
        if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
            count += 1
    
    print(count)

    ✔問題4:文字列の並べ替え


    入力した文字列が大文字と数字(0~9)のみで構成されている場合は、すべての文字列を昇順に並べて出力し、すべての数字に値を加算します.
    例)K 1 KA 5 CB 7->ABCK 13

    👉 トラブルシューティングプロセス


    文字列を入力すると、前から1文字ずつ確認します.
    数値の場合はnumを追加し、アルファベットの場合はリストに保存し、リストを昇順に出力します.
    string = list(input())
    alpha = []
    num = 0
    
    for i in string:
    	if i.isalpha() :
        	alpha.append(i)
        else:
        	num += int(i)
            
    alpha.sort() # 알파벳 오름차순으로 정렬
    
    if num == 0:
    	print(alpha)
    else:
    	alpha.appent(str(num))
    	print(''.join(alpha))
    

    🌱 n/a.結論


    実装の難しさは、使用できるライブラリによって異なり、使用する言語によって異なります.そのため、多くの問題を解決し、言語ライブラリの多様性を体験することが重要です.