管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

R05春季ITストラテジスト試験を受験しました

本日はITストラテジスト試験を受験してきました。
情報処理試験はR02年秋季試験以来でした。(受ける気はあったが、ことごとく申込期限切れ...)

せっかくの午前1免除権も失効しており、久しぶりの午前1からの受験となりました。

会場と感想

横浜国立大学でした。駅から若干遠く、かつ、坂...会場に着いた頃にはヘトヘトでした。
横浜国立大学はITストラテジスト専用会場らしく、いつもよりも人数少なめ、平均年齢高めの印象でした。

試験の感想

午前1

2年分くらい過去問をやっての挑戦。とくにこれまでと変わりない印象。
自己採点は24/30(問)でした。

午前2

こちらも2年分くらい過去問をやって臨みました。用語のインプット不足を痛感しました。
自己採点は16/25(問)でした。多分、大丈夫だよな...

午後1

問1、問2を選択。午後1は国語の問題なので、特に記憶ことなく解くことができました。時間はそこそこ余りました。

午後2

問2を選択。「ITストラテジスト」としての記載観点のインプット不足でしたね。振り返るとPM的な視点で書いてしまったような...
何とか文字数は満たしましたが、久しぶりに2,000字を超える文字を書いたため、手が痛くなりました。

総括

勉強不足でしたね...やはり午後2は用意がないとつらいですね。ただ、それが心理的ハードルになり、勉強がおっくうになってしまったことも否定できないです。
しんどいながら、頭をフル回転させるこの試験は勉強しなきゃなーという気にさせてくれるため、合格にこだわらず(お金もかかるため一発でパスしたいとこですが)継続してチャレンジしていきたいと思います。

おまけ(クイックソート)

午前1の問3にクイックソートの問題が出たので、Javaで書いてみました。

ソース

import java.util.Arrays;
import java.util.stream.Collectors;

public class ITStrategistQuickSort {
    public static void main(String[] args) {
        int[] array = { 2, 3, 5, 4, 1 };

        // デバッグ用に配列の中身を表示する
        System.out.println("ソート前:" + arrayToCommaSeparatedString(array));

        quickSort(array, 0, array.length - 1);
        System.out.println("ソート後:" + arrayToCommaSeparatedString(array));
    }

    /**
     * クイックソートを行うメソッド
     * 
     * @param array ソート対象の配列
     * @param i     配列の先頭のインデックス
     * @param j     配列の末尾のインデックス
     */
    public static void quickSort(int[] array, int i, int j) {
        if (i < j) {
            System.out.println("quicksort i:" + i + ", j:" + j + ", array:" + arrayToCommaSeparatedString(array));

            int pivotPos = partition(array, i, j);
            System.out.println("pivot pos:" + pivotPos + ", pivotValue:" + array[pivotPos] + ", array:"
                    + arrayToCommaSeparatedString(array));
            quickSort(array, i, pivotPos - 1);
            quickSort(array, pivotPos + 1, j);
        }
    }

    /**
     * ピボットの位置を決める
     * 
     * @param array ソート対象の配列
     * @param i     配列の先頭のインデックス
     * @param j     配列の末尾のインデックス
     * @return ピボットの位置
     */
    private static int partition(int[] array, int i, int j) {
        // 左端の値をピボットとする
        int pivotValue = array[i];
        int k = i;

        for (int l = i + 1; l <= j; l++) {
            // ピボットより小さい値があれば、ピボットの位置をひとつ右にずらす
            if (array[l] < pivotValue) {
                k += 1;
                swapArrayValue(array, l, i);
                System.out.println("partition k:" + k + ", array:" + arrayToCommaSeparatedString(array));
            }
        }

        System.out.println("partition end:" + arrayToCommaSeparatedString(array));

        return k;
    }

    /**
     * 配列の値を入れ替えるメソッド
     * 2,3,5,4,1という配列があり、i=4, leftPos=0の場合、1,2,3,5,4となるように入れ替える。
     * 2,3,5,4,1という配列があり、i=3, leftPos=1の場合、2,4,3,5,1となるように入れ替える。
     * (インデックスiの値をleftPosの位置に挿入し、それ以降を右に移動する)
     * 
     * @param array   配列
     * @param i       入れ替える値のインデックス
     * @param leftPos 挿入する位置のインデックス
     */
    private static void swapArrayValue(int[] array, int i, int leftPos) {
        int temp = array[i];

        // leftPos以降の値をひとつずつ右にずらす
        for (int j = i; j > leftPos; j--) {
            array[j] = array[j - 1];
        }

        array[leftPos] = temp;
    }

    /**
     * 配列の中身をカンマ区切りの文字列にして返す
     * 
     * @param array 配列
     * @return カンマ区切りの文字列
     */
    public static String arrayToCommaSeparatedString(int[] array) {
        return Arrays.stream(array).mapToObj(String::valueOf).collect(Collectors.joining(", "));
    }
}

実行結果

正解と同じ結果(「1,2,3,5,4」)になりました

ソート前:2, 3, 5, 4, 1
quicksort i:0, j:4, array:2, 3, 5, 4, 1
partition k:1, array:1, 2, 3, 5, 4 
partition end:1, 2, 3, 5, 4
pivot pos:1, pivotValue:2, array:1, 2, 3, 5, 4
quicksort i:2, j:4, array:1, 2, 3, 5, 4
partition end:1, 2, 3, 5, 4
pivot pos:2, pivotValue:3, array:1, 2, 3, 5, 4
quicksort i:3, j:4, array:1, 2, 3, 5, 4
partition k:4, array:1, 2, 3, 4, 5
partition end:1, 2, 3, 4, 5
pivot pos:4, pivotValue:5, array:1, 2, 3, 4, 5
ソート後:1, 2, 3, 4, 5